2011-10-24 18 views
0

これはちょっと変わったものです。私はHTTPClient 4.1.2を使用しています。そのURLには「#」のようなものがあることがわかるたびに、URLに#がついています。HTTPClient - リダイレクトURLに#アンカーでHTTP GETが壊れています

たとえば、URL http://stks.co/eWtを取得しようとすると、URL http://news.ichinastock.com/2011/10/jack-ma-alibaba-has-prepared-20-billion-to-acquire-yahoo/#.Tpw-xG61XjU.twitterにリダイレクトされます。現在、このURLは公開されていますが、問題はHTTPClientがURIをURI: /2011/10/jack-ma-alibaba-has-prepared-20-billion-to-acquire-yahoo/#.Tpw-xG61XjU.twitterに設定してget要求を送信するため、サーバーが404ページが返されないことが返されます。

IE、Firefox、およびcURLから送信されたGETを見ると、URIの末尾から#...が取り除かれます。たとえば、cURL GETリクエストURIはURIとして設定されます。/2011/10/jack-ma-alibaba-has-prepared-20-billion-to-acquire-yahoo/ - ...削除されました。これは全く同じエントリURL http://stks.co/eWtです。

テストとして、この生のURLをHTTPClient(つまりHttpGet httpget = new HttpGet("http://news.ichinastock.com/2011/10/jack-ma-alibaba-has-prepared-20-billion-to-acquire-yahoo/#.Tpw-xG61XjU.twitter");)に送信すると、同じ404が見つかりませんでした。

HTTPClientの設定は、末尾の#...などの設定をURLから自動的に削除できるように設定できます。または、手動でURLから削除するにはどうすればよいですか(すべてのリダイレクトURLを取得する必要があることに注意してください)。

+0

これは、HTTPを助けることができます。。。: //stackoverflow.com/questions/4251841/400-error-with-httpclient-for-a-link-with-an-anchor –

+0

ええ、私はこの1つを見ました。しかし、問題は、URLに#アンカーがあるかどうかわかりません。すべてのUR Lsは短いURLサービスから来ていますが、この短いURLサービスはURLに#anchorを保持し、HTTPClientはこれを盲目的にリダイレクト301から取り出し、ページを取得しようとします。 – NightWolf

答えて

1

Webサーバーが壊れているようです。 URI仕様では、番号記号(#)がURIのパス部分を終了することを示しています。 Webサーバーがパスの#部分の後で何かを考慮するなら、それはURI仕様に従っていません。

パスコンポーネントには、通常、階層形式で構成されたデータが含まれており、非階層クエリコンポーネントのデータとともに、URIのスキームおよび名前付け権限(存在する場合)の範囲内のリソースを識別し、 。

RFC3986は、私はいくつかの人気のあるWebサーバをテストし、そして - 。パスは、」最初の疑問符(「?」)または番号記号(「#」)文字、またはURIの終わりで終了しますそれらはすべて、番号記号の後の部分を無視して、正しくこれらのURIを解析

を私もこの問題を回避するための任意の良い提案を持っていない。しかし、少なくとも今は非難する人知っている

+0

Davidさん、ありがとう、これは間違いなくWebサーバーのことです。しかし、私たちはいくつかのサイトをクロールしています(私は確かに犬のサーバーがたくさんあります)。だから、単純な回避策が必要かもしれません。それはcURL、IEとFFのすべてがそれを取り除くので、サーバーインプリメンテーションについて心配する必要はないようです。 – NightWolf

+0

HTTPClientのソースコードを変更することをお勧めします。コードを呼び出すリダイレクトロジックにフックを追加し、URLを変更する機会を与えます。私はそれが醜いことを認識しますが、あなたは他の誰かの問題を取り組んでいます。 –

0

注:ハッシュ(およびハッシュ)の後に来るすべての文字列は、サーバーに送信されません。 URLのハッシュは、ブラウザーがサーバーではなくサーバーで動作するためのものです。

+0

はこれを試しました。問題はそのリダイレクトです。 URLは短い/小さなURLサービスから来て、リダイレクトするので、リダイレクトURLに#anchorがあるかどうかわかりません...リダイレクトURLも同様に取得する必要があります。また、URL内の#をどのように処理するかについては、サーバー固有のものです。それはcURL、IEとFFのすべてがそれを取り除くように見えるので、サーバインプリメンテーションについて心配する必要はありません。 – NightWolf

+0

それは、彼が解決しようとしている非常に問題を作り出して、 –

+0

@NightWolf私はそれがアンカーを持っていると思うが、サーバーはそれを取り除くだろう。 http:// tinyurlを参照してください。com/68mkvcc – Mob

関連する問題