AFNetworking을 처음 사용하고 Go로 작성한 API와의 대화에 사용하려고합니다. Authorization 헤더를 가져 오는 데 문제가 있습니다.AF 네트워킹 및 인증 헤더
+ (HMAPIClient *)sharedHMAPIClient
{
static HMAPIClient* _sharedHMAPIClient = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
_sharedHMAPIClient = [[self alloc] initWithBaseURL:[NSURL URLWithString:HMBaseURL]];
});
return _sharedHMAPIClient;
}
- (instancetype)initWithBaseURL:(NSURL *)url
{
self = [super initWithBaseURL:url];
if (self) {
self.responseSerializer = [AFJSONResponseSerializer serializer];
self.requestSerializer = [AFJSONRequestSerializer serializer];
[self.requestSerializer setAuthorizationHeaderFieldWithUsername:RegistrationAPIKey
password:@"Doesn't matter what goes here."];
}
return self;
}
- (void)hitTestEndpoint
{
[self GET:@"testEndpoint" parameters:nil success:^(NSURLSessionDataTask *task, id responseObject) {
NSLog(@"%@", responseObject);
} failure:^(NSURLSessionDataTask *task, NSError *error) {
NSLog(@"%@", error);
}];
}
을 다음과 같이 나는 그것을 AFHTTPSessionManager을 서브 클래스 및 구성한 내가 호출 할 때 - (무효) hitTestEndpoint, 내 서버 로그에 다음과 같은 헤더 (권한이없는)을 참조하십시오
Key: Accept-Encoding Value: [gzip, deflate]
Key: Connection Value: [keep-alive]
Key: Accept-Language Value: [en;q=1]
Key: User-Agent Value: [TestApp/2 (iPad Simulator; iOS 8.1; Scale/2.00)]
Key: Accept Value: [*/*]
비교를 위해를 나는 다음 curl 명령과 같은 엔드 포인트, 나는 다음과 같은 헤더를 참조
curl https://api.example.com/v1/testEndpoint/ -u test_xqzwjcasogptbnpa:
쳤을 때 :
을Key: Authorization Value: [Basic eHF6d2pjYXNvZ3B0Ym5wYTo=]
Key: User-Agent Value: [curl/7.30.0]
Key: Accept Value: [*/*]
나를 올바른 방향으로 안내 할 수 있습니까? - 고마워요
업데이트 : 각 요청을 볼 수 있도록 AFNetworkActivityLogger를 추가했습니다. 실제로 Authorization 헤더가 포함됩니다. 또한 클라이언트에서 수신 한 HTTP 요청 헤더를 반환하는 http://headers.jsontest.com을 시도했습니다. 인증 헤더 은 해당 출력에입니다.
그래서 내 서버에 문제가 있어야합니다. 각 요청에 대해 이미 모든 헤더를 로깅하고 있으며 어디에서 볼 것인지 잘 모르겠습니다. 이 질문에 태그를 달아 누군가가 아이디어를 가지고 있는지 확인하십시오.
업데이트 2 : 는 내 요청 처리기의 상단에 httputil.DumpRequest에 대한 호출을 추가하고, 또한 인증 헤더가 없음을 보여줍니다. 그건 그렇고, 내가 지정한 모든 맞춤 헤더가 예상대로 나타납니다. 누락 된 인증 헤더입니다.
다음은 이동 코드입니다 :
func testResponse(rw http.ResponseWriter, request *http.Request) {
// check output from DumpRequest()
dump,err := httputil.DumpRequest(request,true)
check(err)
fmt.Println("Output of DumpRequest():")
fmt.Println(string(dump))
fmt.Println("============")
fmt.Println("request.Headers:")
for key, value := range request.Header {
fmt.Println("Key:", key, "Value:", value)
}
fmt.Println("===============")
// return some dummy JSON
rw.Header().Set("Content-Type", "application/json")
rw.Write(PersonToJson(getPerson("2f6251b8-d7c4-400f-a91f-51e09b8bfaf4")))
}
좋은 아이디어. DumpRequest를 사용하여 http 요청 전체를 살펴 보았지만 거기에는 존재하지 않습니다. 이 정보로 위의 질문을 업데이트했습니다. – boxel
실제로 나를 위해 일하는 예. 나는 웹 개발자에게 익숙하지 않고 "올바른"방식으로 작업하려고했지만 사용자 정의 헤더를 사용하는 것이 좋습니다. – boxel