2012-05-11 7 views
3

私はサーバー(aspx)からhtml応答を取得しようとしています。要求のgetパラメータでリダイレクトURLを処理する方法はありますか?

NSString *urlstr = [[NSString alloc] initWithFormat:@"http://www.someSiteThatRedirectsWithGetParameters.com?parameter1=1&parameter2=2"]; 

NSURL *url = [ NSURL URLWithString:urlstr];  
NSMutableURLRequest *urlRequest = [ NSURLRequest requestWithURL: url]; 

NSData data = [NSURLConnection sendSynchronousRequest:urlRequest returningResponse:&response error:&error]; 

NSURL *lastURL=[response URL]; 

NSLog(@"Last url %@", lastURL); 

私はwww.someSiteThatRedirectsWithGetParameters.comとしてラストURLを取得し、そのため、元の要求されたURLのHTMLページを取得しておりません。

なぜこれが問題なのですが、どうすれば解決できますか?

EDIT

これは私がこれまで試してみました何すべてです:Get the last redirected url in iOS 5? を私はまだ私は、IEしようとしているものを達成することはできませんよ:オリジナルGETリクエストのhtmlページのソースを取得(予定リダイレクトを介して)URLにパラメータを持つ?

+0

パラメータが必要なサイトはリダイレクトしないでください...投稿後のリクエストを使用する方が望ましいので、送信しているものを簡単に把握できません。 – Martol1ni

+0

私はサイトを運営している人ではないので、サイトが何をすべきかどうかを制御できないので、私はリクエストを送信しているので、質問です! –

+0

最新の投稿をご覧ください。 – Martol1ni

答えて

0

2つのリクエストを送信する方法を試してみます。最初のリクエストを送信すると、redirectURLがレスポンスになります。次に、レスポンスの新しいURLを作成し、そのURLにGETパラメータを要求します。私はそれを試していないが、私はそれが動作すると思う。

1

私はwww.someSiteThatRedirectsWithGetParameters.com ので、元のHTMLページが URLを要求し得ていないとして、ラストURLを取得しています。

リクエストがリダイレクトされているのは、接続先のサーバーからリクエストが最初に送信されたURLにページが存在しないと伝えられているからです。代わりにリダイレクトされたURLを使用する必要があります。これがリダイレクト応答の要点です。

応答がHTTP 303の場合、新しい要求はPOSTからGETに正しく変更されます。これは、ページのリフレッシュが望ましくない結果を伴う元の要求を再送信する場合を避けるために行われることがあります。この場合、リクエストをいくつかのURLにPOSTし、サーバーは要求を受け入れますが、クライアントを別のURLにリダイレクトして応答し、最終的にサーバーの応答が表示されます。

どうしてこれを解決できますか?

上記の「理由」について説明しました。 「解決策」は、サーバーからの応答を受け入れ、サーバーの応答を含むURLへのリダイレクトに従うことです。

+0

私は、Webブラウザで元のリクエストを使用すると、要求されたページがロードされますが、コードを使用してHTMLデータを取得すると同じことは起こりません:( –

+0

http:// www .bookfinder4u.com/IsbnSearch.aspx?isbn = 0755315316&mode = direct&option = all&country = usaあなたがブラウザでリンクを開くと検索ページが表示されますが、同期/非同期のhttpリクエストでは、取得するデータはホームページ(http://bookfinder4u.com) –

+0

になります。次に、送信しているリクエストとブラウザのリクエストを調べる必要がありますそれらの間に何が違うのかを見るために送信しています。これは、サーバーがなぜ異なって応答するのかを理解するのに役立ちます。サーバーが送信しているユーザーエージェントを認識しない、またはブラウザーがリクエストに含まれている(または含まれていない)他のヘッダーが嫌いである可能性があります。このような状況では、[Charles proxy](http://www.charlesproxy.com/)のようなツールが非常に役立ちます。 – Caleb

関連する問題