2014-05-19 2 views
0

저는 iOS에서 새로 생겼습니다.POST 요청에 잘못된 매개 변수가 있습니다.

를 걸이 키 - 값 매개 변수 요청 :

NSString* params = @"sid=d2a8b790364944ef870ed94c1e4fdea3 & phone=+380503424248"; 
NSURL* url = [NSURL URLWithString:@"http://gps.privatbank.ua/auth/check"]; 

[request setURL:url]; 

request.HTTPMethod = @"POST"; 
request.HTTPBody = [params dataUsingEncoding:NSUTF8StringEncoding]; 
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"]; 


NSURLResponse *response; 
NSError *error; 
NSData *jsonData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:nil]; 

NSDictionary *results = jsonData ? [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers|NSJSONReadingMutableLeaves error:&error] : nil; 

NSString *result = [results valueForKey:@"result"]; 

if([result isEqualToString:@"error"]){ 
    authorizationViewController = [AuthorizationViewController new]; 
    [authorizationViewController openEnterPhone:self]; 
} 

그러나 서버는 항상 응답에게 { "결과": "오류"} 반환 내가이 데이터 던져 우체부 통과

- 반환을 "성공 "

enter image description here

같은 요청하지만, 안드로이드 응용 프로그램에서 보이는 같은 :

,536,
HttpPost postMethod = new HttpPost("http://gps.privatbank.ua/auth/check"); 

List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2); 

nameValuePairs.add(new BasicNameValuePair("sid", PreferenceController.getSsid(context))); 
nameValuePairs.add(new BasicNameValuePair("phone", PreferenceManager.getDefaultSharedPreferences(context).getString("phone_number",""))); 

postMethod.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 

ResponseHandler<String> res = new BasicResponseHandler(); 

String response = getInstance().execute(postMethod, res); 

... "성공"을 반환합니다.

내가 놓친 매개 변수는 무엇입니까?

UPD : 문제가 어디 있는지 이해

. 우편 배달부에서 '+'기호 (전화 번호)를 '% 2B'(으)로 변환하지만 POST 요청은이 작업을 수행하지 않습니다. 이 문제를 해결하려면 어떤 매개 변수를 설정해야합니까?

+0

'jsonData'를 생성 할 때'NSError'를 할당하고 왜 먼저 실패하는지 확인하십시오. – Pancho

답변

0

내가이, 건배 도움이되기를 바랍니다 NSString* params = @"sid=d2a8b790364944ef870ed94c1e4fdea3&&phone=+380503424248";

을보십시오.

+0

[NSURLConnection sendSynchronousRequest : request returningResponse : & response error : nil] 행은 nil을 반환합니다. –

0

내가이 서버의 응답을 얻을 수 있었다 다음 코드를 사용 : 당신이 전에 params 문자열에 빈 공간이되었다 나타났습니다 RESULT:{ result = error; }

우선에 대한

NSString* params = @"sid=d2a8b790364944ef870ed94c1e4fdea3&phone=+380503424248"; 
    NSURL* url = [NSURL URLWithString:@"http://gps.privatbank.ua/auth/check"]; 

    NSMutableURLRequest *request = [[NSMutableURLRequest alloc]init]; 

    [request setURL:url]; 

    request.HTTPMethod = @"POST"; 
    request.HTTPBody = [params dataUsingEncoding:NSUTF8StringEncoding]; 
    [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"]; 


    NSURLResponse *response; 
    NSError *error; 
    NSData *jsonData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]; 

    if(error)NSLog(@"ERROR:%@",error); 

    NSDictionary *results = jsonData ? [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers|NSJSONReadingMutableLeaves error:&error] : nil; 
    NSString *result = error ? [NSString stringWithFormat:@"ERROR-->%@",error.localizedDescription] : results; 

    NSLog(@"RESULT:%@",result); 

NSLog 및 이후 매개 변수의 & 부호. 빈 공간을 제거하고 아무런 문제가 없어야합니다.

UPD. 다음 방법으로 POST하기 전에 문자열을 이스케이프 처리하십시오.

-(NSString*)escapeString:(NSString*)string 
{ 

NSString *escapedString = (NSString*)CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(NULL,(__bridge CFStringRef)string, NULL, CFSTR("!*();:@&=+$./?%#[]"), kCFStringEncodingUTF8)); 

return escapedString; 

} 
+0

매우 이상합니다. 코드를 복사하여 붙여 넣었으며 잘못된 응답을 받았습니다. 어떤 반응을 얻었습니까? –

+0

이 글의 코드에없는 또 다른 사항은'request' 객체를 초기화하는 부분입니다. 이 'NSMutableURLRequest * request;'또는 'NSMutableURLRequest * request = [[NSMutableURLRequest alloc] init];과 같은 메시지를 보셨나요? – Pancho

+0

NSMutableURLRequest를 올바르게 초기화하지 않았으므로 NSData가 항상 0입니다. – Pancho

관련 문제