2013-12-10 2 views
4

to this post which describes doing a PUT/POST for RESTful API과 비슷한 패턴을 사용하려고하지만 GET을 시도하고 있습니다.AFNetworking-2.0에서 JSON으로 인코딩 된 GET 요청을 수행하는 방법은 무엇입니까?

내 원래 코드는 GET: 키워드를 사용하는 것을 제외하고 거의 동일하게 보입니다. 빨리 JSON 본문을 보내는 대신 url로 매개 변수를 인코딩한다는 것을 알았습니다. 이것은 AFJSONSerializer 클래스의 문서에서 언급되지 않았습니다. 수퍼 클래스 문서 (AFHTTPSerializer)로 이동하여 해당 속성을 통해 읽어야합니다. 여기에서 the one about HTTPMethodsEncodingParametersInURI을 찾을 수 있습니다. 기본적으로이 세트에는 HEAD, GET 및 DELETE가 채워집니다. 따라서 이러한 요청 유형의 경우 JSON 시리얼 라이저는 분명히 동작을 위해 부모 클래스로 되돌아갑니다. HTTPMethodsEncodingParametersInURI = [NSSet set]를 설정하는 라인은 내가 GET 너무 수배처럼 나를 JSON 인코딩 된 매개 변수를 얻을 수 있도록하기위한 것입니다

AFHTTPSessionManager* manager = [AFHTTPSessionManager manager]; 
manager.securityPolicy.allowInvalidCertificates = YES; 
manager.requestSerializer = [AFJSONRequestSerializer serializer]; 
manager.requestSerializer.HTTPMethodsEncodingParametersInURI = [NSSet set]; 
[manager.requestSerializer setAuthorizationHeaderFieldWithUsername: currentUser() password: currentPassword()]; 
[manager 
    GET: @"https://172.16.214.214:44321/trees" 
    parameters: [NSDictionary dictionary] 
    success:^(NSURLSessionDataTask* task, id responseObject){ 
     NSLog(@"Response: %@", responseObject);} 
    failure:^(NSURLSessionDataTask* task, NSError* error){ 
     NSLog(@"Error: %@", error);}]; 

:

그래서 나는 다음과 같은 코드를 함께 넣어. 난 아직도 무엇을 놓치고

2013-12-10 10:11:14.149 myValve[957:60b] Error: Error Domain=NSURLErrorDomain Code=-1005 "The 
network connection was lost." UserInfo=0x17e5d4b0 
{NSErrorFailingURLStringKey=https://172.16.214.214:44321/trees, 
NSErrorFailingURLKey=https://172.16.214.214:44321/trees, NSLocalizedDescription=The network 
connection was lost., NSUnderlyingError=0x17e53240 "The network connection was lost."} 

:이 사용하고 내 오류 콘솔에서 다음을 얻을 때 불행히도, 난 서버에서 아무것도 볼?

+0

사실 그 대답은 @Rob 이었으면 좋겠습니다. 이 링크는 왜 프레임 워크가 아마도 그것을 지원하지 않았는지 명확하게 해줍니다. 감사. –

+0

답변으로 게시했습니다. 나는 다른 사람들의 탁월한 대답에 대해 인정하는 것처럼 보이기를 원치 않았습니다. 마찬가지로, 나는 항상 "하지 마라."라고 대답 할 수있는 답변을 게시하는 것을 주저합니다. 롤. – Rob

답변

2

여기 AFNetworking의 행동 뒤에 이론적 근거는 아마도 가장 간결하게 스택 오버플로 질문 HTTP GET with request body 설명입니다 :

는 참고로 나는 일반적으로이 같은 JSON 요청을합니다. 그 대답 중 하나 quotes Ray Fielding :

... 즉, 모든 HTTP 요청 메시지는 메시지 본문을 포함 할 수 있으므로이를 염두에두고 메시지를 구문 분석해야합니다. 그러나 GET을위한 서버 의미론은 본문 (있는 경우)이 요청에 의미 론적 의미가 없도록 제한됩니다. 구문 분석에 대한 요구 사항은 메소드 의미론에 대한 요구 사항과 별개입니다.

그래, GET을 사용하여 본문을 보낼 수 있습니다. 아니, 그렇게 할 수 없습니다. HTTP/1.1 spec

GET는 상기 요청의 본문에 포함되는 정보를 숙고하지 않음 "- 요청 URI에 의해 식별된다 (엔터티의 형태로)간에 정보 검색"으로 정의한다. 따라서 GET에있는 신체의 사용은 기술적으로 금지되어 있지 않을 수도 있지만 기껏해야 비표준입니다. 그것을지지하지 않는 AFNetworking의 선택은 전혀 놀라운 것이 아닙니다.

따라서 GET 요청에 대해 JSON을 본문에 넣고 싶지 않을 수 있습니다. 일반적으로 URL에 매개 변수를 추가합니다. 요청 본문에 JSON을 보내려면 POST을 수행하십시오.

0

소리가 서버에 연결할 수없는 것 같으면 iOS 외부에서 전화를 걸려고 했습니까?

NSURL *url = @"https://172.16.214.214:44321/trees"; 
NSData* data = [NSData dataWithContentsOfURL: url]; 
NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error]; 
+0

그래, 간단한 컬 쿼리가 정상적으로 작동합니다. –

관련 문제