私のアプリは、フォームベースの認証を使用するWebサイトからデータを取得します。ログインページへのリダイレクトに透過的に反応し、POSTリクエストを介してリクエストされたクレデンシャルを提供する必要があります。
以前にASIHTTPREQUESTを使用してから、URLをチェックして、認証ページにリダイレクトされたかどうかを確認し、リダイレクトされた場合は、ログインフォーム変数を使用してPOSTリクエストを送信し、元のリクエストを再度作成しました。それは動作しますが、ちょっとしたハックです。
私は現在、コードをAFNetworkingに移行しており、これを実現するためのよりエレガントな方法があるかどうか疑問に思っています。おそらく、認証ヘッダーを挿入しますか?認証ページへのリダイレクトが発生したときにAFHTTPClientに認証デリゲートメソッドをトリガーさせてから、フォームを投稿します。これが少しの擬似コードです:
- (void)requestFinished:(ASIHTTPRequest *)request {
if ([Connection isAuthURL:[request url]])
{
// If so have we just tried to login ?
if ( requestState == requestStateSendingLoginCredentials )
{
// Login Failed - tried to login & been redirected back to login page
[self requestFailed:request];
}
else
{
// We have been directed to login page after a page request
requestState = requestStateSendingLoginCredentials
[self postLoginForm:request];
}
}
else
{ // Not the authentication page
if ( requestState == requestStateSendingLoginCredentials )
{ // We must have successfully logged in
requestState = requestStateSuccessful;
// If it was a form we need to post again now were logged in.
if ([lastRequest isAForm])
{
// If original request that triggered the login was a POST request
// we have to re-send it.
[self requestURL:nil]; // This will send the last request again
return;
}
}
if (requestState == requestStateSuccessful)
{
[self processResponse:request];
}
}