NSURLResponse
返される応答ヘッダーから場所を削除しているようです。curlコマンドを実行すると、次のようになります。
< HTTP/1.1 302 Found
< Date: Mon, 18 Mar 2013 14:43:41 GMT
< Server: Apache/2.2.14 (Ubuntu)
< X-Powered-By: PHP/5.3.14 ZendServer/5.0
< Set-Cookie: PHPSESSID=kv1j4cjpt69q91sgd2m270d775; path=/; secure; HttpOnly
< Expires: Thu, 19 Nov 1981 08:52:00 GMT
< Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
< Pragma: no-cache
< Location: http://kt-act.s3.amazonaws.com/...
< Vary: Accept-Encoding
< Content-Length: 0
< Connection: close
< Content-Type: text/html
ただし、次のObj-Cコードで同じエンドポイントをヒットします。
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@%@/content",kBaseAPIURL,_document.href]]];
[NSURLConnection connectionWithRequest:request delegate:self];
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
[_resourceData setLength:0];
_progressView.progress=0.0f;
_loadingView.hidden=NO;
fileSize = [[NSNumber numberWithLongLong:[response expectedContentLength]] intValue];
NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response;
NSDictionary *headers = [(NSHTTPURLResponse *)response allHeaderFields];
NSLog(@"Response: %@", headers);
}
私にこれを与えます:
2013-03-18 10:40:11.537 KTMobile[25221:1ac03] Response: {
"Cache-Control" = "no-store, no-cache, must-revalidate, post-check=0, pre-check=0";
Connection = close;
"Content-Length" = 36;
"Content-Type" = "application/json";
Date = "Mon, 18 Mar 2013 14:38:44 GMT";
Expires = "Thu, 19 Nov 1981 08:52:00 GMT";
Pragma = "no-cache";
Server = "Apache/2.2.14 (Ubuntu)";
"Www-Authenticate" = "Basic realm=\"Protected\"";
"X-Powered-By" = "PHP/5.3.14 ZendServer/5.0";
"X-Response-Time" = "0.153447";
}
ロケーションヘッダーが失われる理由を誰かが知っていますか?そして、なぜcurlはtext / htmlを報告しますが、NSURLResponseはapplication / json returnを報告しますか?また、別のSOスレッドで提案されているように、応答URLのquery / params部分を取得しようとしましたが、それでも場所がわかりません。
編集:私もconnection:willSendRequest:redirectResponse
代理人を試しました。
- (NSURLRequest *)connection:(NSURLConnection *)connection willSendRequest:(NSURLRequest *)request redirectResponse:(NSURLResponse *)redirectResponse
{
NSLog(@"Redirect response url! %@", [redirectResponse URL]);
NSLog(@"Redirect response! %@", redirectResponse);
return request;
}
[redirectResponse URL]
これにより、とredirectResponse
オブジェクトの両方に対してnullが返されます。これは、サーバーエンドポイントがobj-cコードのロケーションオブジェクトを返さないかのようです。この動作の理由はありますか?