cURLは、「Client for URLs」の略で、さまざまなプロトコルを使用してデータを転送するためのコマンドラインツールです。この記事は、広く使用されている便利なリファレンスとして使用できるコマンドを提供することを目的としています。
目次
- 単一のファイルをダウンロードする
- cURL出力をファイルに保存する
- プログレスバーを非表示にする
- 一度に複数のファイルを取得する
- -Lオプションを使用してHTTPロケーションヘッダーをフォローする
- 以前のダウンロードを続行/再開
- 認証の有無にかかわらずプロキシを使用する
- HTTPヘッダーのクエリ
- FTPサーバーへのファイルのアップロード
- FTPサーバーからファイルをダウンロード
- 範囲を使用したリスト/ダウンロード
- 詳細とトレースオプションを使用した詳細情報
- SMTPプロトコルを使用してメールを送信する
- HTTP/2サポートチェック
- HTTPメソッドをシミュレートする
- パラメータを使用してPOSTリクエストを作成する
- 結論
curl
を呼び出すことができます ほとんどのLinuxベースのオペレーティングシステムにプリインストールされているため、インストール方法を考えずにターミナルからコマンドを実行できます。
カールには、次のような膨大な数のユースケースがあります。
- FTPアップロード
- プロキシサポート
- SSL接続
- HTTP投稿
cURLは、次のすべてのプロトコルの使用もサポートします:DICT、FILE、FTP、FTPS、GOPHER、HTTP、HTTPS、IMAP、IMAPS、LDAP、LDAPS、POP3、POP3S、RTMP、RTSP、SCP、SFTP、SMB、SMBS、SMTP 、SMTPS、TELNET、およびTFTP。
次のコマンドは、URLのコンテンツを取得し、それをSTDOUT(つまり、端末)に表示します。
curl https://www.gnu.org
出力をファイルに保存するには、以下に示すようにリダイレクトします。これにより、追加のダウンロード統計も表示されます。
curl https://www.gnu.org > gnu-org.html
cURL出力をファイルに保存
-o
を使用して、cURLコマンドの結果をファイルに保存できます。 / -O
オプション。
-
-o
(小文字のo)結果はコマンドラインで指定されたファイル名で保存されます -
-O
(大文字のO)URLのファイル名が取得され、結果を保存するためのファイル名として使用されます
curl -o my-gettext.html https://www.gnu.org/software/gettext/manual/gettext.html
その結果、ページ gettext.html
my-gettext.html
という名前のファイルに保存されます 。また、 -o
を指定してcURLを実行する場合にも注意してください。 オプションの場合、ダウンロードの進行状況メーターが次のように表示されます。
cURL -O
を使用する場合 、ローカルマシンの「gettext.html」という名前のファイル自体にコンテンツを保存します。
curl -O http://www.gnu.org/software/gettext/manual/gettext.html
注: curl
の場合 印刷の混乱を避けるために、端末にデータを書き込む必要があり、プログレスメーターを無効にします。 >
を使用できます 、 -o
、 -O
結果をファイルに移動するためのオプション。
デフォルトでは、cURLはプログレスバーを表示します。非表示にするには-s
(-サイレントコード> )オプションを使用できます。
curl -s -O http://www.gnu.org/software/gettext/manual/gettext.html
何らかの理由でプラットフォームで機能しない場合は、いつでもstderrを / dev / null
にリダイレクトできます。 :
curl -O http://www.gnu.org/software/gettext/manual/gettext.html 2>/dev/null
もちろん、コマンドラインでURLを指定することで、1回のショットで複数のファイルをダウンロードできます。
curl -O https://www.gnu.org/software/gettext/manual/html_node/index.html -O https://www.gnu.org/software/gettext/manual/gettext.html
-Lオプションを使用してHTTPロケーションヘッダーをフォローする
ただし、デフォルトでは、cURLはHTTPロケーションヘッダーに従いません。リダイレクトとも呼ばれます。リクエストされたウェブページが別の場所に移動されると、HTTPロケーションヘッダーがレスポンスとして送信され、実際のウェブページが配置されている場所が示されます。
-L
を使用して、リダイレクトに従うようにcURLを要求できます。 以下に示すように、オプション。
curl -L https://www.google.com
cURL -C
を使用する オプションで、何らかの理由ですでに停止されているダウンロードを続行できます。これは、大きなファイルをダウンロードし、ダウンロードが中断された場合に役立ちます。
-C-
と言えば 、次にcURLは、ダウンロードの再開を開始する場所を見つけます。オフセット-C
を指定することもできます 。指定されたオフセットバイトは、ソースファイルの最初からスキップされます。
curl
を使用して大きなダウンロードを開始します 、 Ctrl-C
を押します ダウンロードの合間に停止します。
curl -O https://www.gnu.org/software/gettext/manual/gettext.html
curl-C-
を使用する 、以前に中断したところからダウンロードを続行できます。
curl -C - -O https://www.gnu.org/software/gettext/manual/gettext.html
proxy.yourdomain.comのポート8080でリッスンしているプロキシサーバーの背後にいる場合は、次のようにします。
curl -x proxy.yourdomain.com:8080 -U user:password -O https://www.gnu.org/software/gettext/manual/gettext.html
-U user:password
をスキップできる場所 プロキシが認証を必要としない場合。
HTTPヘッダーを使用すると、リモートウェブサーバーは実際のリクエストとともに自身に関する追加情報を送信できます。さらに、これにより、リクエストの処理方法に関する詳細がクライアントに提供されます。
WebサイトからHTTPヘッダーを照会するには、次のようにします。
curl -I https://www.gnu.org
HTTP/1.1 200 OK
Date: Mon, 13 Jul 2020 21:22:32 GMT
Server: Apache/2.4.7
Content-Location: home.html
Vary: negotiate,accept-language,Accept-Encoding
TCN: choice
Strict-Transport-Security: max-age=63072000
Access-Control-Allow-Origin: (null)
Accept-Ranges: bytes
Cache-Control: max-age=0
Expires: Mon, 13 Jul 2020 21:22:32 GMT
Content-Type: text/html
Content-Language: en
FTPサーバーへのファイルのアップロード
cURLを使用して、 -T
を使用してFTPサーバーにファイルをアップロードすることもできます。 オプション。
curl -u ftpuser:ftppass -T myfile.txt ftp://ftp.server.com
その結果、上記のコマンドは myfile.txt
という名前のファイルをアップロードします FTPサーバーに。範囲操作を使用して、同時に複数のファイルをアップロードすることもできます。
curl -u ftpuser:ftppass -T "{file1,file2}" ftp://ftp.server.com
オプションで、。
を使用できます。 STDINから入力を取得し、リモートに転送します。
curl -u ftpuser:ftppass -T - ftp://ftp.server.com/mynewfile.txt
上記のコマンドは、標準入力からユーザーからの入力を取得し、その内容を mynewfile.txt
という名前でftpサーバーに保存します。 。
-T
を1つ指定できます URLごとに、ペアで何をどこにアップロードするかを指定します。
FTPサーバーからファイルをダウンロード
cURLは、FTPサーバーからファイルをダウンロードするためにも使用できます。指定されたFTPパスがディレクトリの場合、デフォルトでは、特定のディレクトリの下にファイルが一覧表示されます。
curl -u ftpuser:ftppass -O ftp://ftp_server/public_html/mysql.php
上記のコマンドは、 mysql.php
をダウンロードします ftpサーバーからファイルを作成し、ローカルディレクトリに保存します。
curl -u ftpuser:ftppass -O ftp://ftp_server/public_html/
ここで、指定されたURLはディレクトリを参照しています。したがって、cURLは、指定されたURLの下にあるすべてのファイルとディレクトリを一覧表示します。
cURLは、URLで指定される範囲をサポートします。範囲を指定すると、範囲内で一致するファイルがダウンロードされます。 FTPミラーサイトからパッケージをダウンロードすると便利です。
curl http://ftp.us.debian.org/debian/pool/main/[a-z]/
上記のコマンドは、 a-z
からのすべてのパッケージを一覧表示します ターミナルの範囲。
-v
を使用して何が起こっているかを知ることができます オプション。このオプションは詳細モードを有効にし、詳細を出力します。
curl -v https://www.gnu.org
aboutコマンドは以下を出力します:
* Trying 209.51.188.148:443...
* Connected to www.gnu.org (209.51.188.148) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
* CAfile: /etc/ssl/certs/ca-certificates.crt
CApath: none
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.2 (IN), TLS handshake, Certificate (11):
* TLSv1.2 (IN), TLS handshake, Server key exchange (12):
* TLSv1.2 (IN), TLS handshake, Server finished (14):
* TLSv1.2 (OUT), TLS handshake, Client key exchange (16):
* TLSv1.2 (OUT), TLS change cipher, Change cipher spec (1):
* TLSv1.2 (OUT), TLS handshake, Finished (20):
* TLSv1.2 (IN), TLS handshake, Finished (20):
* SSL connection using TLSv1.2 / ECDHE-RSA-AES128-GCM-SHA256
* ALPN, server did not agree to a protocol
* Server certificate:
* subject: CN=emacs.org
* start date: Jun 17 09:07:40 2020 GMT
* expire date: Sep 15 09:07:40 2020 GMT
* subjectAltName: host "www.gnu.org" matched cert's "www.gnu.org"
* issuer: C=US; O=Let's Encrypt; CN=Let's Encrypt Authority X3
* SSL certificate verify ok.
> GET / HTTP/1.1
> Host: www.gnu.org
> User-Agent: curl/7.71.1
> Accept: */*
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< Date: Mon, 13 Jul 2020 21:56:04 GMT
< Server: Apache/2.4.7
< Content-Location: home.html
< Vary: negotiate,accept-language,Accept-Encoding
< TCN: choice
< Strict-Transport-Security: max-age=63072000
< Access-Control-Allow-Origin: (null)
< Accept-Ranges: bytes
< Cache-Control: max-age=0
< Expires: Mon, 13 Jul 2020 21:56:04 GMT
< Transfer-Encoding: chunked
< Content-Type: text/html
< Content-Language: en
<
...
SMTPプロトコルを使用してメールを送信
cURLは、SMTPプロトコルを使用してメールを送信するためにも使用できます。以下に示すように、from-address、to-address、およびmailserverip-addressを指定する必要があります。
curl --mail-from [email protected] --mail-rcpt [email protected] smtp://mailserver.com
上記のコマンドを入力すると、ユーザーがデータをメールに送信するのを待ちます。メッセージを作成したら、。
と入力します。 (ピリオド)最後の行として、すぐにメールを送信します。
HTTP/2サポートチェック
最新のcURLリリースを使用している場合は、-http2
を使用できます。 特定のURLが新しいHTTP/2プロトコルをサポートしているかどうかを確認するオプション。したがって、サイトがHTTP / 2をサポートしている場合は、 HTTP / 2.0 200
が表示されます。 HTTP / 1.1 200
の代わりにヘッダーに 。
curl -I --http2 https://www.opensource.com
HTTPメソッドをシミュレートする
GET
メソッドは、特定のURLからリソースを取得するために使用されます。シンプルなcurlhttps://www.gnu.org/
コマンドはGET
を使用します デフォルトのHTTPメソッドとして使用できますが、-request GET
を使用して指定することもできます。 または-XGET
。
curl --request GET https://www.gnu.org
POST
メソッドは、情報をWebサーバーに投稿するために使用されます(フォーラムへのコメントなど)。これは、-request POST
を使用して指定できます または-XPOST
。
curl --request POST https://yourwebsite.com
DELETE
メソッドは、特定のURLに関連付けられたWebサーバーからリソースを削除します。これは、-request DELETE
を使用して指定できます または-XDELETE
。
curl --request DELETE https://yourwebsite.com
PUT
メソッドは、クライアントがWebサーバーに送信するデータに基づいてリソースを作成または置換します。 (例:新しいWebページの作成または既存のWebページの更新)。これは、-request PUT
を使用して指定できます または-XPUT
。
curl --request PUT https://yourwebsite.com
次のコマンドは、 animal1
を送信します およびanimal2
パラメータとそれに対応する値をhttps://yourdomain.com/animals.php
curl --request POST --data "animal1=cat&animal2=dog" https://yourdomain.com/animals.php
このヒントを使用して、通常のHTMLフォームの動作をシミュレートできます。
この投稿では、cURLとはについて説明しました そして、いくつかの基本的なコマンドで何ができるか。 cURLの詳細については、プロジェクトのウェブサイトにアクセスしてください。