メモ > サーバ > 各論: ネットワーク > curlでアクセスする
■curlでアクセスする
■GETの例
$ curl http://example.com/
$ curl https://example.com/
■POSTの例
$ curl -X POST -d '{
"data": {
"post1": "xxx",
"post2": "yyy",
"post3": "zzz"
},
"jsonapi": {
"version": "1.0"
}
}' 'https://example.com/request.php?get1=xxx&get2=yyy&get3=zzz' --header 'x-api-key: ABCDEFG'
※URLに「&」を含む場合、全体をシングルクォートで囲う。もしくは「\」でエスケープする
http://example.com/request.php?get1=xxx&get2=yyy&get3=zzz
↓
'http://example.com/request.php?get1=xxx&get2=yyy&get3=zzz'
http://example.com/request.php?get1=xxx\&get2=yyy\&get3=zzz
データの受信は、以下のようなPHPプログラムを作成すれば確認できる
<?php
print_r($_GET);
print_r($_POST);
print_r($_SERVER);
curl option 覚え書き - Qiita
https://qiita.com/takayukioda/items/edf371b3566bea64d046
「-X」や「-d」などの意味も解説されている。また省略しない場合(long option)のパラメーターも紹介されている
curlコマンドの使い方 〜GET、POST、REST(json)の確認と、windowsでの利用手順
https://viral-community.com/security/curl-8263/
curlで複数パラメータのGETを投げる - Qiita
https://qiita.com/nobu_121/items/52bb9d5961aa3e017813
PHPで任意のHTTPヘッダをリクエストから取得する方法 - Qiita
https://qiita.com/sakatam/items/f06a1da5682c3bfe870e
■ヘッダのみ取得
$ curl -I -s http://example.com/
$ curl -s -I -L http://example.com/ | grep ^Location
■SSLの証明書エラーを無視して接続する
$ curl https://localhost:10000 --insecure
上のように「--insecure」を指定すると、エラーを無視して接続できる
■Basic認証
通常のリクエストは以下のとおり
$ curl https://example.com/
URLに認証情報を埋め込むことができる
「-u」でユーザ名とパスワードを指定することもできる
$ curl -u 'username:password' https://example.com/
Authorizationでユーザ名とパスワードを指定することもできる
ただしこの場合、ユーザ名とパスワードはBase64エンコードしたものを指定する必要がある
$ echo -n 'username:password' | base64
dXNlcm5hbWU6cGFzc3dvcmQ=
$ curl https://example.com/ -H "Authorization:Basic dXNlcm5hbWU6cGFzc3dvcmQ="
「-H」は「--header」と指定しても同じ
$ curl https://example.com/ --header "Authorization:Basic dXNlcm5hbWU6cGFzc3dvcmQ="
curlでBasic認証する方法3つ - と、記号を含むとき注意点など - tweeeetyのぶろぐ的めも
https://www.tweeeety.blog/entry/2021/11/08/124745
curl で Basic 認証(Authorization ヘッダを利用した場合) - ようへいの日々精進XP
https://inokara.hateblo.jp/entry/2017/11/23/184942
■ユーザーエージェント指定
以下いずれかのように指定することで、ユーザーエージェント「HeadlessChrome」を付与できる
$ curl -A "HeadlessChrome" https://example.com/
$ curl -H "User-Agent: HeadlessChrome" https://example.com/
■hosts指定
curlでhost指定・名前解決して実行 - 一応技術ブログ的なやつです
https://iettty.hatenablog.jp/entry/2018/10/23/235142
hostsファイルを設定しなくても、以下で維持知的なドメインの変更ができる
$ curl --resolve example.com:80:203.0.113.1 http://example.com/
以下でアクセスを確認できる
$ curl --resolve refirio.net:80:203.0.113.1 http://refirio.net/
$ curl --resolve test1.refirio.net:80:203.0.113.1 http://test1.refirio.net/
$ curl --resolve test2.refirio.net:80:203.0.113.1 http://test2.refirio.net/
SSLだとエラーになる
…が、これは 203.0.113.1 自体がSSLを受け付けるようになっていないだけだと思われる
また確認したい
$ curl --resolve refirio.net:443:203.0.113.1 https://refirio.net/
curl: (7) Failed to connect to refirio.net port 443: Connection refused
■FTP
FTP接続もできる
SFTPやSSH接続の方法は判らなかったが、それはcurlコマンドではなくsshコマンドやsftpコマンドを使うべき…ということかもしれない
>curl -u refirio:abcd1234 ftp://refirio.net/test/
-rw-rw-r-- 1 512 501 24 Feb 27 2014 test1.php
-rw-rw-r-- 1 512 501 24 Mar 11 2015 test2.php
以下略
FTPサーバとのやりとりをcurlコマンドで行う - Qiita
https://qiita.com/mom0tomo/items/384da47dee08a21c1ce5
curl で FTP over TLS/SSL なサーバーへアクセスする
https://gist.github.com/keijiro/4015735
■メール送信
メールを送ろう。curlで。 - Blanktar
https://blanktar.jp/blog/2016/01/curl-smtp-mail
以下は、ロリポップのSMTPで mailto@gmail.com 宛に送信する例
あらかじめテキストファイルでメール内容を作成しておき、それを使って送信する
$ cat mail.txt
以下は、GmailのSMTPで mailto@gmail.com 宛に送信する例
あらかじめテキストファイルでメール内容を作成しておき、それを使って送信する
To: mailto@gmail.com
From: info@example.com
Subject: テストメール
テスト。
これはテストメールです。
$ curl smtps://smtp.lolipop.jp:465 --mail-from 'info@example.com' --mail-rcpt 'mailto@gmail.com' -u 'info@example.com' -T mail.txt
Enter host password for user 'info@example.com':
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 133 0 0 100 133 0 450 --:--:-- --:--:-- --:--:-- 450
$ cat mail.txt
To: mailto@gmail.com
From: example@gmail.com
Subject: テストメール
テスト。
これはテストメールです。
$ curl smtps://smtp.gmail.com:465 --mail-rcpt 'mailto@gmail.com' -u 'example@gmail.com' -T mail.txt
Enter host password for user 'example@gmail.com':
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 141 0 0 100 141 0 62 0:00:02 0:00:02 --:--:-- 62