API에 동기식 REST 요청을 만들려고합니다. API는 HTTP 기본 인증을 사용하므로 Accept: application/json
헤더를 보내는 것 외에도 Authorization
헤더를 Base64로 인코딩 된 사용자 이름과 비밀번호 쌍으로 지정해야합니다. 하나의 헤더를 사용하는 경우 요청이 올바르게 실행됩니다 (성공적으로 나를 인증하거나 내 콘텐츠 형식을 지정). 두 헤더를 모두 사용하면 Authorization
행을 무시하고 "HTTP 기본 액세스가 거부 됨"을 반환합니다 (아마도 a 401).여러 헤더가있는 NSMutableURLRequest
그래서 나는 내 인생이 잘못되었다고 생각하지 않습니다. REST 클라이언트를 통해 요청을 실행하면 정상적으로 작동하므로 내 자격 증명이 유효하다는 것을 100 % 확신합니다. 나는 꽤 Objective-C에 익숙하지 않기 때문에 아마도 내가 따르지 않는 디자인 패턴이있을 수 있다고 생각한다. 그런 경우 NSMutableDictionary
번에 setValue:forKey
번으로 전화하는 것이 유효합니까? 나는 또한 동일한 결과를 가진 요청 객체에 setValue:forHTTPHeader
을 사용하여 시도했다.
여기에 코드입니다 :
NSURL *url = [NSURL URLWithString:@"http://foo.com/api/v1/bar"];
NSMutableURLRequest *request= [NSMutableURLRequest requestWithURL:url];
NSMutableDictionary *headers = [NSMutableDictionary dictionary];
NSURLResponse *urlResponse;
NSError *error;
[headers setValue:@"application/json" forKey:@"Accept"];
[headers setValue:@"Basic ..." forKey:@"Authorization"];
[request setAllHTTPHeaderFields:headers];
NSData *urlData = [NSURLConnection sendSynchronousRequest:request
returningResponse:&urlResponse
error:&error];
NSString *responseString = [[NSString alloc] initWithData:urlData
encoding:NSUTF8StringEncoding];
NSLog(@"%@",responseString);
모든 헤더 필드를 바꾸는 대신 요청에 값을 추가해 보았습니까? 즉,'-setAllHTTPHeaderFields'를 사용하는 대신'-addValue : forHTTPHeaderField :'를 사용하십시오. –
또한 사전에 데이터를 추가하는 표준 방법은'-setObject : forKey :'입니다. –
그리고 마지막으로'Authorization'의 내용이'NSString'입니까? –