2016-07-08 1 views
1

내 서버 연결에 CocoaHTTPServer을 사용하고 있습니다. 내 HTML 페이지 (웹 클라이언트)에는 일부 JSON 데이터가 있지만 응답을받을 때 헤더 파일에 JSON 데이터가 표시되지 않습니다.JSON 데이터가 응답하지 않습니다. iOS의 헤더

HTML 페이지 : :이 헤더를 추가하고

endAPSession: function (success, fail) { 
    this.endApSessionIssued = true; 
    console.log('endAPSession.'); 
    this.proxyAjax({ 
     url: 'http://192.168.123.1/stw-cgi-rest/network/wifi/connect', 
     username: this.username, 
     password: this.password, 
     method: 'PUT', 
     data: JSON.stringify(data), 
     contentType: 'application/json' 
    }) 
    .done(function (data, textStatus, jqXHR) { 
     device.endApSessionIssued = false; 
     console.log("endAPSession success:", arguments); 
     return success(jqXHR); 
    }) 
    .fail(function (jqXHR, textStatus, errorThrown) { 
     device.endApSessionIssued = false; 
     console.log("endAPSession fail:", jqXHR); 
     return fail(jqXHR); 
    }) 
    }, 

    var data = { 
     SSID: network.name, 
     Password: password, 
     SecurityMode: network.security 
    }; 

: 아래

내 코드입니다

 Accept = "*/*"; 
    "Accept-Encoding" = "gzip, deflate"; 
    "Accept-Language" = "en-us"; 
    Authorization = "Digest username=\"admin\",realm=\"iPolis\",nonce=\"2f65566a6c6239a1358732f8bfe08909\",uri=\"/stw-cgi-rest/network/wifi/connect\",qop=auth,nc=00000001,cnonce=\"7007d989\",response=\"dae876901c002f20b3baa100580a1634\""; 
    Connection = "keep-alive"; 
    "Content-Length" = 63; 
    "Content-Type" = "application/json"; 
    Host = "127.0.0.1:8090"; 
    Origin = "http://localhost:8090"; 
    Referer = "http://localhost:8090/"; 
    "User-Agent" = "Mozilla/5.0 (iPhone; CPU iPhone OS 9_3_2 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Mobile/13F69"; 
password = ""; 
    username = admin; 
    "x-forwarded-url" = "http://192.168.123.1/stw-cgi-rest/network/wifi/connect"; 
: 나는 응답 아래 얻고있다

-(void) addHeaders:(HTTPMessage *)response { 
    [response setHeaderField:@"Access-Control-Allow-Origin" value:@"*"]; 
    [response setHeaderField:@"Access-Control-Allow-Headers" value:@"accept,x-forwarded-url, authorization, content-type,username,password, camera-data"]; 
    [response setHeaderField:@"Access-Control-Allow-Methods" value:@"HEAD,GET,PUT,DELETE,OPTIONS,POST"]; 
    [response setHeaderField:@"Access-Control-Max-Age" value:@"86400"]; 
    [response setHeaderField:@"Access-Control-Expose-Headers" value:@"content-type, content-length, connection, date, server, x-www-authenticate"]; 
} 

여기 JSON 응답이 없습니다. 여기서 Content-Length이 올 것입니다. 데이터가 있음을 의미합니다. 그러나 그것은 오지 않는다.

JSON은 다음과 같이해야합니다 :

"camera-data" = "{\"SSID\":\"HomeNetwork\",\"Password\":\"1234567\",\"SecurityMode\":\"PSK\"}"; 

나는 위의 JSON 내 응답오고있다,하지만 난 내 HTML 페이지를 변경하지 않으 내 HTML 페이지에 코드 아래에 추가하고있는 경우.

if(proxyOpts.data != null) { 
     proxyOpts.headers['camera-data'] = proxyOpts.data; 
    } 

그렇다면 안내 메시지를 보내주세요. 어떻게 응답 헤더에서 JSON을 얻을 수 있습니까? 내 응답에 camera-data을 얻으려면 어떻게해야합니까?

+0

당신은 응답 헤더를 추가하는 코드를 표시했습니다,하지만 당신은 문제가 말하는 그 응답 _body_ 누락. JSON 데이터를 응답에 쓰는 데 사용하는 Objective-C 코드는 어디에 있습니까? 또한,'done' 핸들러는 반환 된'data'를 가지고 아무것도하지 않습니다. – aroth

+0

응답에 JSON 데이터를 작성하면 CocoaHTTPServer 클래스가 처리합니다. –

+0

데이터가 헤더 또는 내부 헤더 외부로 어떻게 전달되는지 알고 싶습니다. 나중에 헤더를 추가해야합니까? –

답변

1

요약하면, 정확하게 이것을 얻으려면 일부 웹 브라우저에 & JavaScript 코드가 포함되어 있어야합니다. 이 자바 스크립트 코드를 사용하면 호스트하는 웹 서버에 CocoaHTTPServer이라는 요청을 보냅니다. 이 요청 내에서 data: JSON.stringify(data)과 함께 JSON 데이터를 전송합니다. 이 데이터를 서버 측에서 가져와 사용하고 싶습니다. 그 맞습니까 ? 맞습니다 경우

, 서버 측에서, 당신은 CocoaHTTPServer에서 들어오는 모든 연결에 대한 HTTPConnection의 사용자 지정 하위 클래스를해야합니다 :

[httpServer setConnectionClass:[YourConnectionClass class]]; 

을 그런 다음이 하위 클래스에서 (NSObject<HTTPResponse> *)httpResponseForMethod:(NSString *)method URI:(NSString *)path의 사용자 정의 구현을해야합니다 . 이 메소드는 모든 요청에 ​​대한 응답을 얻기 위해 호출됩니다. 요청 방법 등의 데이터가 포함 된 요청의 본문,

- (NSObject<HTTPResponse> *)httpResponseForMethod:(NSString *)method URI:(NSString *)path { 
    // Check if the method is PUT. 
    if ([method isEqual:@"PUT"]) { 
     // Get the data sent in this request. 
     NSData *requestData = [request body]; 

     // Transform the data into usable JSON. 
     NSError *error; 
     NSDictionary *jsonData = [NSJSONSerialization JSONObjectWithData:requestData options:kNilOptions error:&error]; 

     // At this point, you have your json data send in the request, you can do anything with it. 
     // ... 
     // ... 
    } 

    // ... 
    // Return a proper response depending on the request. 
    // ... 
} 

를 얻기 위해, 당신은 당신의 자바 스크립트 코드에 지정된처럼 PUT 경우이 방법에서는 예를 확인하실 수 있습니다 또한 CORS 문제를 피하기 위해 PUT 분명히 다른 방법을 사용하고 OPTIONS을 허용해야합니다. PUT 메소드 이후

- (BOOL)supportsMethod:(NSString *)method atPath:(NSString *)path 
{ 
    if ([method isEqualToString:@"PUT"]) 
    return YES; 

    if ([method isEqualToString:@"OPTIONS"]) 
    return YES; 

    return [super supportsMethod:method atPath:path]; 
} 

우리는 너무 기본적으로 비어 있고 오버라이드 (override) 할 필요가 processBodyData 방법을 사용하여 서버 측에서이 데이터를 처리해야하는 데이터를 전송합니다.내 HTTPConnection 서브 클래스에서이 3 가지 방법으로

- (void)processBodyData:(NSData *)postDataChunk 
{ 
    [request appendData:postDataChunk]; 
} 

, 나는 문제의 하나에 유사한 자바 스크립트 코드를 사용할 수 있습니다

var data = { name: "HiDeo", location: "Internet", other: "test" }; 

$(document).ready(function() { 
$.ajax({ 
    method: "PUT", 
    url: "http://localhost:12345/", 
    data: data, 
    username: "testUsername", 
    password: "testPassword", 
    data: JSON.stringify(data), 
    contentType: 'application/json' 
}) 
.done(function(msg) { 
    console.log(msg) 
}); 

});

I 서버 측에 NSLog(jsonData);, 나는 다음과 같은 출력을 얻을 것이다 경우

{ 
    location = Internet; 
    name = HiDeo; 
    other = test; 
} 
+0

안녕하세요, ur 답장을 보내 주셔서 감사합니다. 정확하게 UR 이해가 정확합니다. 하지만 [요청 본문]이 null입니다. 그래서 NSDictionary 또한 null이됩니다. –

+0

나는 나의 답변을 편집하여 당신과 가까운 작업 예제를 얻기 위해 취한 여러 단계에 대해 더 자세히 설명했다. – HiDeo

+0

나는 모든 방법을 가지고있다. 이 방법 밖에 없었습니다. 나는 u에 따라 더한다. - (void) processBodyData : (NSData *) postDataChunk –

관련 문제