この目的のために、元のURLがhttp://host/form
であり、新しいURLがであると偽りhttps://host/form
ます。(これを出荷する前に、両方のURLが安全になることに注意してください。ただし、非安全から安全へのリダイレクトは、これをテストするための便利なリダイレクトのようです。)
NSURLConnection
リダイレクトを使用してWebAPIにアクセスしています。http://hostaform
基本的には、送信したばかりのすべてを取得して、に再送信したいと思いhttps://host/form
ます。これがデフォルトの動作になると思いましたが、リダイレクトで本文が失われているようです。
connection:willSendRequest:redirectResponse:
ですから、デリゲートのイベントを処理してNSURLConnection
、ボディを取り付け直す必要があると思います。問題は、このメッセージがひどく文書化されていないように見えることです。このメソッドで私が見つけることができる唯一の情報はNSURLConnectionクラスリファレンスですが、これはあまり役に立ちません。特に、これが含まれます:
redirectResponse:リダイレクトの原因となったURL応答。リダイレクト処理にデリゲートが関与した結果、このメソッドが送信されない場合は、nilになる可能性があります。
これが何を意味するのかわかりません。最初の呼び出しと組み合わせると、これは、リダイレクト応答の前に、最初の要求に対しても送信されていることwillSendRequest:
を意味すると思います。willSendRequest:
あれは正しいですか?
そこで、本文を余分に保持するコードをデリゲートに追加し、次のwillSendRequest:
ハンドラーを追加しました。
- (NSURLRequest *)connection: (NSURLConnection *)inConnection
willSendRequest: (NSURLRequest *)inRequest
redirectResponse: (NSURLResponse *)inRedirectResponse;
{
if (inRedirectResponse) {
NSMutableURLRequest *r = [[inRequest mutableCopy] autorelease];
[r setURL: [inRedirectResponse URL]];
[r setHTTPBody: body];
return r;
} else {
return inRequest;
}
}
動作しません。しかし、これが正しいアプローチであるかどうかさえわかりません。それは私には過度にハックのようです。私は何をすべきですか?これはどこかに文書化されていますか?これまでのところ、AppleのドキュメントやGoogleの使用に役立つものは何も見つかりませんでした。
(これはiPhoneにありますが、これらのクラスには大きな違いはないようです。)