GNU/Linux >> Linux の 問題 >  >> Linux

curl がリダイレクトされた後に最終 URL を取得する

ありがとう、それは私を助けました。いくつかの改善を行い、それをヘルパー スクリプト "finalurl" でラップしました:

#!/bin/bash
curl $1 -s -L -I -o /dev/null -w '%{url_effective}'
  • -o /dev/null に出力
  • -I 実際にダウンロードするのではなく、最終的な URL を見つけるだけ
  • -s サイレント モード、プログレスバーなし

これにより、次のように他のスクリプトからコマンドを呼び出すことが可能になりました:

echo `finalurl http://someurl/`

別のオプションとして:

$ curl -i http://google.com
HTTP/1.1 301 Moved Permanently
Location: http://www.google.com/
Content-Type: text/html; charset=UTF-8
Date: Sat, 19 Jun 2010 04:15:10 GMT
Expires: Mon, 19 Jul 2010 04:15:10 GMT
Cache-Control: public, max-age=2592000
Server: gws
Content-Length: 219
X-XSS-Protection: 1; mode=block

<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>301 Moved</TITLE></HEAD><BODY>
<H1>301 Moved</H1>
The document has moved
<A HREF="http://www.google.com/">here</A>.
</BODY></HTML>

しかし、それは最初のものを通り過ぎません。


curl-w オプションとサブ変数 url_effective

のようなもの

curl -Ls -o /dev/null -w %{url_effective} http://google.com

詳細

-L         Follow redirects
-s         Silent mode. Don't output anything
-o FILE    Write output to <file> instead of stdout
-w FORMAT  What to output after completion

もっと

-I を追加するとよいでしょう (つまり、大文字の i )同様に、コマンドが「本文」をダウンロードしないようにしますが、HEADメソッドも使用します。これは、質問に含まれるものではなく、サーバーの動作を変更するリスクがあります。サーバーは、GET に正常に応答する場合でも、HEAD に適切に応答しないことがあります。


Linux
  1. Debian – Debianパッケージ名を指定して、最新の.debURLへのURLを取得する方法は??

  2. Lsのある日付の後に作成されたファイルのみを取得するにはどうすればよいですか?

  3. 同じ行のカールコマンドの後にテキストをエコーし​​ますか?

  1. Awkで`sub`を実行した後、どこで新しい文字列を取得しますか?

  2. Linux:デフォルトのブラウザで URL を開くコマンド

  3. プログレスバーを表示しないように cURL を取得するにはどうすればよいですか?

  1. cURLコマンドとは何ですか?その使用方法は?

  2. cURL で HTTP リクエストを実行する (PROXY を使用)

  3. wget または同様のプログラムは、POSIX システムで常に使用できますか?