2013-09-02 4 views
3

나는 GET을 여러 번 사용했습니다. 하지만 현재 상황에서는 POST 메서드를 사용하여 webService를 사용해야합니다. 나는 많은 자습서를 통과했지만 할 수 없었다. 경로가 "http://vinipost.com/Services/Mobile_Application/wcfService.svc/logIn"이고 4. 기본값은 테스트를위한 이메일 ID가 "ID"와 "패스"입니다 "[email protected]"이고 암호는 "만세"AFnetworking 또는 NSJsonialialization을 사용하여 json 데이터를 게시하는 방법

AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:[NSURL URLWithString:@"http://vinipost.com/Services/Mobile_Application/wcfService.svc/logIn"]]; 
    [httpClient setParameterEncoding:AFFormURLParameterEncoding]; 
    NSMutableURLRequest *request = [httpClient requestWithMethod:@"POST" path:@"http://vinipost.com/Services/Mobile_Application/wcfService.svc/logIn" parameters:@{@"id":@"[email protected]",@"pass":@"shail"}]; 

    AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) { 
     self.movies = [JSON objectForKey:@"logInResult"]; 
     NSLog(@"=========%@",self.movies); 
    } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) { 
     NSLog(@"Request Failed with Error: %@, %@", error, error.userInfo); 

}]; 
[operation start]; 

OUTPUT

=========(
     { 
     msg = "Server encountered error"; 
    } 
) 
입니다

서버 측 사람은 "MSG = 서버 오류가 발생했습니다"를 인쇄하는 이유는 catch 블록 이잖아 체결 말하고

내 의견에 정교하게, 그리고 아마도 방법 다운 가능 추적하는 몇 가지 힌트를 제공 할 것이다
+1

실제 문제가 무엇인지 말하면 정말 도움이 될 것입니다. 게시 할 수 없습니까? 아니면 오류가 다시 발생합니까? 오류가 무엇입니까? –

+0

@ MichaelDautermann- 문제는 바로 응답을 다시 얻지 못한다는 것입니다. –

+0

서버 쪽 사람이 catch 블록에 들어간다 고 말합니다. "msg = 서버에 오류가 발생했습니다" –

답변

1

웹 서비스 및 아피스.

웹 서비스가 예상대로 작동하는지 확인하십시오. Xcode는 필요 없지만 귀중한 명령 줄 도구 curl입니다. curl은 강력합니다. 제공하는 많은 옵션이 혼란 스러울지라도 명령 행에서 매우 간결하게 HTTP 요청을 수행 할 수 있습니다.

(말풍선에 대한 구체적인 도움이 필요하면 매뉴얼 페이지 및 웹을 참조하십시오).

그래서, 터미널 응용 프로그램을, 컬을 시도 시작할 수와 컬이 작동하는지 테스트하기 위해 간단한 GET 명령을 입력 할 수 있습니다 :

$ curl -X GET http://example.com 

컬 콘솔에 www.example.com에서 HTTP 페이지를 반환해야합니다 .

$ man curl 

당신은 내용을 검색 할 수 있습니다, 컬에서 도움을받을 매뉴얼 페이지를 열려면

. 참고 : 곱슬 곱슬 곱슬 곱슬 곱슬합니다 - 복잡하지 않습니다. 압도 당하지 마세요 - 기초부터 시작하십시오 :

위의 문제로 인한 다음 POST 요청은 간단한 GET보다 정교합니다. {: "만세 @ gmail.com.", "패스": "만세" "ID"}

지금에 입력

입니다 : 우리는 먼저 우리는 우리의 JSON 필요에 .. JSON을 게시 할 명령 행 :

$ curl -X POST -H "Content-Type: application/json" -d '{"id": "[email protected]", "pass": "shail"}' "http://vinipost.com/Services/Mobile_Application/wcfService.svc/logIn" 

참고 : JSON을 보낼 때 우리는 콘텐츠 형식에 대해 서버를 통보해야한다. HTTP 규칙에 따르면, 우리는 이 실제로이어야한다는 것을 의미합니다. Content-Type을 보냅니다.

해당 Content-Type은 명령에 지정된대로 "application/json"입니다.

서비스가 작동 중일 때 "무언가"를 반환해야합니다. 선호하는 종류의 응답 데이터를 말할 수도 있습니다. JSON에서 응답 본문을 원한다고 말하면됩니다.서버가 적절한 헤더 포함 말할하려면

"을 수락 : 응용 프로그램/JSON"

우리 수 문자 인코딩에 대해 더 구체적으로 :

가 "수락 : 응용 프로그램/JSON; 문자셋 =을 utf-8 "

구문에 대해 까다롭게해야합니다. 하지만 꽤 없습니다 -

지금, 우리가 기대하는 것은 JSON의

$ curl -X POST -H "Content-Type: application/json" -H "Accept: application/json; charset=utf-8" -d '{"id": "[email protected]", "pass": "shail"}' "http://vinipost.com/Services/Mobile_Application/wcfService.svc/logIn" 

응답 8 UTF-콘솔에 인쇄 할 수있는 반응이다. 더 나은

$ <curl command> | python -m json.tool 

: 여기

는 해결책 (|) 우리는 강력한 파이프 명령을 사용 지금

$ curl -sSv <other commands> | python -m json.tool 

파이썬 프로그램을 시작하는 두 번째 도구 (파이썬)를 호출 할을하는 컬 (curl) 출력을 받아 JSON을 콘솔에 출력한다.

이제 웹 서비스가 작동 중임을 확인하면 curl 명령을 해당 NSURLConnection 요청에 매핑하는 것이 단순합니다.

NSJSONSerialization을 사용하여 사전에서 JSON을 만들고이를 JSON (텍스트)의 NSData 개체로 직렬화해야합니다.

를 셋업 NSMutableRequest 객체를 다음과 같이

헤더 "의 Content-Type"을 위와 같이 "동의"로 설정합니다. HTTPBody 속성에 JSON 데이터 (UTF-8로 인코딩 됨)를 할당합니다. URL과 메소드 "POST"를 설정하십시오.

연결을 시작하십시오.

마지막 단계는 다릅니다. 당신은 NSURLConnection에서 편리한 방법, 예를 들어 sendAsynchronousRequest:queue:completionHandler:을 사용하거나 대리자 방법을 사용하거나 타사 라이브러리 등을 사용할 수 있습니다.

+0

@ couchDeveloper- 그래서 문제의 해결책은 무엇입니까 ...? 서버 측에서 그들의 문제가 ..... .....? –

+0

글쎄, 문제가 있는지 테스트해야합니다. 설명한대로 웹 서비스가 작동하고 HTTP (및 가능한 REST) ​​규칙에 따라 작동합니까? 예를 들어 GET 요청의 경우 상태 코드 200 (OK)을 반환하고 Content-Type (본문 데이터의 경우) "application/json"입니까? 인증되지 않았을 때 401을 반환합니까? JSON에서 오류 응답입니까? 서버가 예상대로 작동하면 코드에서 요청을 올바르게 설정하고 네트워크 코드에서 시도하십시오. 하지만 AFN이 JSON으로 해석해야하는 기초 객체를 전달하는 대신 JSON을 직접 만들고 POST 데이터로 보냅니다. – CouchDeveloper

+0

@ CouchDeveloper- 웹 서비스가 작동하는지 테스트 할 수 있습니까? –