web-dev-qa-db-ja.com

curlを使用して、アンカータグ付きの相対URLにリダイレクトするURLを要求する

Curlを使用して、次のようなLocation:行を使用して別のURLにリダイレクトするURLを要求しています。

Location:/path/to/resource#name

私が理解しているように、リダイレクト応答のその行はHTTP仕様に従って無効であるため、curl呼び出し全体が(この場合は400応答コードで)当然失敗します。ただし、wgetまたはWebブラウザーを使用してURLを要求すると、ページが正常にレンダリングされます(リダイレクトの前に絶対パスを入力するか、アンカータグを削除するヒューリスティックを使用していると想定しています)。

Curlに同じことをさせるために私ができることはありますか(「公式に」不正な形式であっても、リダイレクトを正常に実行するために必要なことを行います)?

編集:もう少し詳細。最終的な応答コードは400です(404などではありません)。 HEADリクエスト(curl -I -Lを使用)すると、302 FoundLocation: /Errorを使用)が500 Server Errorにリダイレクトされます。ただし、通常のリクエスト(-Iオプションなしで、 -Lオプション)、http_code(curlの--write-out内)の400を取得します。したがって、この場合のHEADリクエストは、標準のGETとは機能が異なります。

3
jrdioko

この特定の問題がcurl 7.15.5で発生することを発見しましたが、curl 7.21.0では問題なく動作します。したがって、それを解決するバグ修正または機能が間に実装されている必要があります。誰かがこれに対処するパッチまたは変更を正確に知っているなら、それはありがたいです!

3
jrdioko

私が理解しているように、curlはデフォルトでLocationヘッダーを追跡しません。

このような動作を有効にするには、-Lまたは--locationスイッチを使用します。そのようです:

tom@slappy:~▶ curl -I -L http://Shell/redirect.php     
HTTP/1.1 302 Found
Date: Tue, 17 Jan 2012 00:13:54 GMT
Server: Apache/2.2.17 (Ubuntu)
X-Powered-By: PHP/5.3.5-1ubuntu7.2
Location: /target.html#someAnchor
Content-Type: text/html

HTTP/1.1 200 OK
Date: Tue, 17 Jan 2012 00:13:54 GMT
Server: Apache/2.2.17 (Ubuntu)
Last-Modified: Tue, 17 Jan 2012 00:10:37 GMT
Accept-Ranges: bytes
Content-Length: 7
Content-Type: text/html

注:-Iは、ページコンテンツではなくヘッダーを表示するためにのみ使用されます。 Ubuntuで実行されているcurl 7.21.6を使用してこれをテストしました。

6
Tom Hudson