1

는 "GET"요청, 반환 모든 시간을 널 (null)이 다음 코드 @ 사용하여 서버에서 데이터를 얻을려고 반환?목표 C NSMutableURLRequest가 GET 요청은 널 (null) JSON

또는 서버 측 일 수 있습니다. 문제 ... ?

귀하의 도움에 감사드립니다! 편집 후

+ (id)sendParam:(NSString*)ParamString url:(NSString*)url{ 
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc]init]; 


    NSString *post = ParamString; 

    NSData *postData = [post dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES]; 

    NSString *postLength = [NSString stringWithFormat:@"%d",[postData length]]; 

    [request setURL:[NSURL URLWithString:url]]; 


    NSLog(@"postLength =%@",postLength); 

    [request setHTTPBody:postData]; 
    [request setHTTPMethod:@"GET"]; 
    [request addValue:ParamString forHTTPHeaderField:@"GET"]; 
    [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; 


    NSURLResponse *response; 
    NSError *error; 

    NSData *aData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]; 

    NSMutableArray*jsonReturn = [[NSMutableArray alloc]init]; 
    jsonReturn = (NSMutableArray*)[NSJSONSerialization JSONObjectWithData:aData options:kNilOptions error:&error]; 
    NSLog(@"jsonReturn %@",jsonReturn); 

    return jsonReturn; 
} 

는 :

+ (id)sendParam:(NSString*)ParamString url:(NSString*)url{ 

    NSString*StringGETMETHOD = [NSString stringWithFormat:@"%@%@",url,ParamString]; 

    NSMutableURLRequest *request = [[NSMutableURLRequest alloc]init]; 
    [request setURL:[NSURL URLWithString:StringGETMETHOD]]; 
    [request setHTTPMethod:@"POST"]; 


    NSURLResponse *response; 
    NSError *error; 

    NSData *aData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]; 
    NSLog(@"aData=%@",aData); 


    if (aData) { 

     jsonReturn=(NSMutableArray*)[NSJSONSerialization JSONObjectWithData:aData options:kNilOptions error:&error]; 

     NSLog(@"jsonReturn %@",jsonReturn); 


} 

답변

0

당신은 GET과 POST 사이에 혼동 될 것으로 보인다. GET을하고 있지만 POST와 같은 데이터를 제공하고 있습니다 (일반적으로 GET을 위해 필수 사항은 아니지만 GET을 위해 본문 데이터를 사용하는 것을 배제 함).

일반적으로 GET에 본문 데이터를 사용하고 싶지는 않습니다. 보통/예상하지 않으므로 여러 가지 문제가 발생할 수 있습니다. setHTTPMethod:@"POST"으로 변경하여 POST를 올바르게 수행하거나 매개 변수를 요청 URL의 일부로 변경하십시오.

실제로 모든 것은 서버가 기대하는 (그리고 처리 할 수있는) 것에 달려 있습니다. 이것은 당신이 알아야 할 것과 일치해야하는 것입니다 ...


다음으로 다른 문제가 있습니다. 입력 한 매개 변수 문자열에는 인코딩이 필요한 문자 (공백과 같이)가 있습니다. 이러한 문자를 이스케이프하기 전에 매개 변수 문자열에 stringByAddingPercentEscapesUsingEncoding:을 사용하십시오.

이스케이프 문자가 추가되어 브라우저에서 작동합니다 (응답을로드 한 후 브라우저 주소 표시 줄에 나타남).

+0

그래서 "HTTP POST"를 사용할 수 있다는 것을 의미합니다. 서버 측은 "GET"메서드를 사용하여 처리 할 수 ​​있습니까? 대답답장을 보내 주셔서 감사합니다. –

+0

아니요, 서버가 가져 오기를 기대하고 게시하지 않으면 GET을 보내야하지만 본문 데이터가 아닌 URL의 일부로 인코딩 된 매개 변수가 있어야합니다. 서버에 오류 로그가있어 문제가 무엇이라고 생각하는지 말해 줄 수 있습니까? – Wain

+0

안녕하세요. 위의 편집 코드를 참조하십시오. 괜찮습니까? (여전히 null을 반환 함), "POST"문자열을 브라우저에 복사하면 결과가 반환됩니다. –

1

이 매개 변수를 HEADER 필드로 보내야한다는 점은 의심 스럽습니다. 나는 또한 당신이 POST가 아닌 GET을 보내야한다고 생각할 것이다.

jsonReturn을 [[NSMutableArray alloc] init]으로 설정하는 것은 의미가 없습니다. jsonReturn을 nil로 설정하는 대신 왜 그렇게하는지 설명하십시오.

jsonReturn을 로깅하는 것은 의미가 없습니다. 재미있는 모든 것들이 사라 졌기 때문입니다. 적어도 jsonReturn = nil 인 경우 응답 및 반환 된 데이터를 기록해야합니다. paramString 현재이와 매개 변수를 보낼 수 없습니다 "GET"방법을 사용하여 전송

: 당신은 서버에서 응답을 얻기 위해 GET 사용하려면

+0

로그에 'aData'와'error '가 표시되어야 함을 의미합니다. '(JSON 역 직렬화 이전과 이후), 그렇습니까? – Wain

+0

jsonReturn이 nil이 아닌 경우 http 요청이 정상적으로 처리되었으므로 로그 할 필요가 없습니다. jsonReturn이 nil이면 문제가 http 또는 반환 된 데이터인지 여부를 확인하려는 것이므로 오류, 응답 및 데이터를 기록하려고합니다. "오류"는 서버와의 통신에 대한 것이고 "응답"은 서버에서 수행하기로 결정한 것이기 때문에 오류와 응답을 모두 기록해야합니다. 서버가 "요청한 데이터를 가질 수 없습니다"라고 말하면 http 요청과 관련해서는 오류가 없습니다. 그것은 서버가 말한 것을 당신에게 말했고, 그래서 그것은 오류가 아닙니다. – gnasher729

3

당신은 내가 내 문제를 발견

//just give your URL instead of my URL 
NSMutableURLRequest *request=[NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://api.worldweatheronline.com/free/v1/search.ashx?query=London&num_of_results=3&format=json&key=xkq544hkar4m69qujdgujn7w"]]; 

[request setHTTPMethod:@"GET"]; 

[request setValue:@"application/json;charset=UTF-8" forHTTPHeaderField:@"content-type"]; 

NSError *err; 

NSURLResponse *response; 

NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&err]; 

//You need to check response.Once you get the response copy that and paste in ONLINE JSON VIEWER.If you do this clearly you can get the correct results.  

//After that it depends upon the json format whether it is DICTIONARY or ARRAY 

NSDictionary *jsonArray = [NSJSONSerialization JSONObjectWithData:responseData options: NSJSONReadingMutableContainers error: &err]; 

NSArray *array=[[jsonArray objectForKey:@"search_api"]objectForKey:@"result"]; 
0

방법 다음에 시도 할 수 있습니다 편지 사이의 공간 ..예 :

**urlParam = [urlParam 
        stringByReplacingOccurrencesOfString:@" " withString:@"%20"];** 

수정 코드 :

+ (id)sendParam:(NSString*)ParamString url:(NSString*)url{ 

    NSString* urlParam = [NSString stringWithFormat:@"%@%@",url,ParamString]; 

urlParam = [urlParam 
        stringByReplacingOccurrencesOfString:@" " withString:@"%20"]; 

    NSMutableURLRequest *request=[NSMutableURLRequest requestWithURL:[NSURL URLWithString:urlParam]]; 

    [request setHTTPMethod:@"GET"]; 

    [request setValue:@"application/json;charset=UTF-8" forHTTPHeaderField:@"content-type"]; 



    NSURLResponse *response; 
    NSError *error; 

    NSData *aData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]; 
    NSLog(@"aData=%@",aData); 


    if (aData) { 

     jsonReturn=(NSMutableArray*)[NSJSONSerialization JSONObjectWithData:aData options:kNilOptions error:&error]; 

     NSLog(@"jsonReturn %@",jsonReturn); 


} 

여러분 모두 감사합니다 "텔 아비브는"다음 코드 줄을 추가하여 "텔 %의 20aviv"

해야합니다!