Memo

メモ > サーバ > 各論: ネットワーク > curlでアクセスする

curlでアクセスする
■GETの例 ■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認証 通常のリクエストは以下のとおり。 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 ■DB データベース接続もできる。 結果に「Connected」と表示されていれば接続成功。 ただし、できるのはあくまでも疎通確認のみ。任意のSQLクエリを実行したりすることはできない。
$ curl -v telnet://localhost:3306 * Trying 127.0.0.1:3306... * Connected to localhost (127.0.0.1) port 3306 * Failure writing output to destination * Closing connection
以下は外部のデータベースに接続する場合の例。
$ curl -v telnet://test-mysql.1234567890.ap-northeast-1.rds.amazonaws.com:3306 * Trying 10.1.3.38:3306... * Connected to test-mysql.1234567890.ap-northeast-1.rds.amazonaws.com (10.1.3.38) port 3306 * Failure writing output to destination * Closing connection
以下は接続できなかった場合の例。
$ curl -v telnet://test2-mysql.1234567890.ap-northeast-1.rds.amazonaws.com:3306 * Could not resolve host: test2-mysql.1234567890.ap-northeast-1.rds.amazonaws.com * Closing connection curl: (6) Could not resolve host: test2-mysql.1234567890.ap-northeast-1.rds.amazonaws.com
curl でDBやキャッシュの疎通確認もできる #Linux - Qiita https://qiita.com/yamotuki/items/2d1c74c3253e9c3b0562 ■メール送信 メールを送ろう。curlで。 - Blanktar https://blanktar.jp/blog/2016/01/curl-smtp-mail 以下は、ロリポップのSMTPで mailto@gmail.com 宛に送信する例。 あらかじめテキストファイルでメール内容を作成しておき、それを使って送信する。
$ cat mail.txt
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
以下は、GmailのSMTPで mailto@gmail.com 宛に送信する例。 あらかじめテキストファイルでメール内容を作成しておき、それを使って送信する。
$ 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

Advertisement