0

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コードのロケーションオブジェクトを返さないかのようです。この動作の理由はありますか?

4

1 に答える 1

0

「HTTP 302」はリダイレクト応答であり、「Location」ヘッダーは、リソースをロードする場所から新しい URL を提供します。

NSURLConnection透過的にリダイレクトに従いますNSURLResponse。リダイレクトされたリクエストに対するレスポンスです。

connection:willSendRequest:redirectResponse:リダイレクトについて知りたい場合は実装できると思いますが、実際に試したことはありません。

于 2013-03-18T14:55:39.690 に答える