1

HTTP 302 ページに出くわしましたLocation: //-now-playing.html(通常は完全な URL であるため奇妙に見えます)。これによりwithが失敗します。それでも、私のブラウザはこの指示で失敗しません。この場合、どうすれば本当のURL を取得できますか?Location: http://www.somewhere.elseHttpURLConnection concon.setFollowRedirects(true)

この場合の完全なリクエストとレスポンスは、www.web-sniffer.net のhttp://cinemaclock.com/showtimes/ont/Toronto/43844/The_Tripという URL を試すことで確認できます。ありがとうございました。

編集:ありがとうございました。これは悪い URL の場合であることがわかりました。誤報ですが、皆様ありがとうございました。

4

4 に答える 4

1

これはエラーであり、自分で処理する必要があります。次の方法で場所を取得できます。

con.getHeaderField("Location");
于 2011-07-08T21:11:24.333 に答える
0

リターンが悪いだけかもしれませんし、ホスト名なしで絶対的な場所へのリダイレクトが行われているかもしれません。

標準では、ロケーション レスポンスには完全な absoulteURI が必要であると規定されていますが、ほとんどのブラウザとソフトウェアは、相対ロケーション レスポンスを問題なく処理します。

これは前に 2 つのスラッシュがありますが、これは確かに悪い形式ですが、ほとんどのサーバーは自動的に、URL 内で // 2 つ一緒にすると本当に 1 つを意味すると見なします。 http://www.xyz.com/index.html を要求し、http://www.xyz.com//index.htmlを要求します

ここで、問題を解決するには、これが実際に相対 URL によるリダイレクトを意図している場合、ヘッダー情報から絶対 URL を作成する必要があります。まず、その相対的な位置がリダイレクトされるため、プロトコルが HTTP を使用していたものと同じであると言うのは安全です。そのため、URL の最初の部分を試す必要があります。

http://

次に必要な部分は HOSTNAME です。これは、HTTP ヘッダー応答の HOST 変数にある必要があります.. (www.xyz.com)

http://www.xyz.com

最後にパス。これは単にヘッダーの場所が上記に追加されて応答したものです

http://www.xyz.com/-now-playing.html

テストする最も簡単な方法は、単純にブラウザを起動して、そのリクエストが目的の場所に到達するかどうかを確認することです。HTMLファイル名がハイフンで始まるという事実は珍しい形式であるため、私にはそれは悪いURLのように見えますが、少なくともURLを構築することで何かが得られるかどうかを確認してみてください.

幸運を。

于 2011-07-08T21:49:42.690 に答える
0

Location:ヘッダーの値を見て、正しいことをしています。

残念ながら、ここでは不適切な URL を取得しています。:-(

于 2011-07-08T21:10:31.170 に答える
0

まず、少なくとも私のコンピューターでは、Safari と Chrome の両方がこのリダイレクトで失敗するため、最も一般的な動作は単にエラーを返し、失敗することです。これは、実際にユーザーに返したい動作である可能性があります。

それでも失敗せずに適切な URL を補間したい場合はLocation:、破損した URL を考慮してリダイレクト フィールドの特別なケースの解析を行う必要があります。

于 2011-07-08T21:11:54.517 に答える