2

この行を実行すると 404 エラーが発生するのはなぜですか?

urllib2.urlopen("http://localhost/new-post#comment-29")

http://localhost/new-post#com-29を任意のブラウザで正常に閲覧できますが...

urlopen メソッドは "#" を含む URL を解析しませんか?

誰か知ってる?

4

1 に答える 1

7

HTTPプロトコルでは、フラグメント(#以降)はネットワーク経由でサーバーに送信されません。フラグメントはブラウザーによってローカルに保持され、サーバーの応答が完全に受信されると、ページ内の正確な場所を何らかの方法で「視覚的に特定」するために使用されます。 「現在」として表示されます(たとえば、返されたページがHTMLの場合、これはHTMLを解析し、最初の適切な<a>フラグを探すことによって行われます)。

したがって、手順は次のとおりです。フラグメントを削除しurlparse.urlparseます。残りを使用してリソースをフェッチします。サーバー応答のcontent-typeヘッダーに基づいて適切に解析します。次に、最初のステップで保持したフラグメントを解析されたリソース内に配置することに基づいて、リソースの「現在のスポット」に関してプログラムが実行する視覚的なアクションを実行します。

于 2010-09-26T15:31:04.883 に答える