Web開発者向けのコマンドラインツール。 cURL の操作スキルを磨く Curl ウィンドウで使用する

実際の例: IP アドレスを変更するには、ルーター (モデム) を再起動する必要があります。 これを行うには、ルーターにログインし、メンテナンス ページに移動して、「再起動」ボタンをクリックする必要があります。 このアクションを複数回実行する必要がある場合は、手順を繰り返す必要があります。 同意します。このルーチンを毎回手動で実行する必要はありません。 cURL を使用すると、これらすべてを自動化できます。 いくつかの cURL コマンドを使用するだけで、ルーター上で認証を取得し、タスクを完了できます。

  • cURL は、コマンド ラインで Web サイトからデータを取得する場合に便利です。
もう 1 つの実践的な例: 複数のサイトの一般的な統計の表示を実装したいと考えています。 cURL を使用すると、これは完全に簡単なタスクになります。cURL を使用して、統計収集サービス (必要な場合) で認証し、(再び cURL コマンドを使用して) 必要なページを取得し、必要なデータを解析します。 この手順がすべてのサイトに対して繰り返され、最終結果が追加されて表示されます。

それらの。 cURL を使用するケースは非常に現実的ですが、ほとんどの場合、プログラムで cURL を使用するプログラマーが cURL を必要とします。

CURL は多くのプロトコルと認証方法をサポートし、ファイルを転送でき、Cookie を正しく処理し、SSL 証明書、プロキシなどをサポートします。

PHP およびコマンドラインの cURL

cURL は、PHP スクリプトとコマンド ラインという 2 つの主な方法で使用できます。

サーバー上の PHP で cURL を有効にするには、php.ini ファイル内の行のコメントを解除する必要があります。

拡張子=php_curl.dll

そしてサーバーを再起動します。

Linux では、curl パッケージをインストールする必要があります。

Debian、Ubuntu、または Linux Mint の場合:

$ sudo apt-get インストールカール


Fedora、CentOS、または RHEL の場合:

$ sudo yum インストールカール

PHP とコマンド ラインでの使用の違いを明確に確認するために、同じタスクを 2 回実行します。最初は PHP スクリプトで、次にコマンド ラインでです。 混乱しないようにしましょう。

cURL を使用したデータの取得

PHP で cURL を使用してデータを取得する

PHP の例:

すべては非常にシンプルです:
$target_url- 興味のあるサイトのアドレス。 サイト アドレスの後にコロンを入力してポート アドレスを追加できます (ポートが標準のものと異なる場合)。

カール初期化- 新しいセッションを初期化し、ハンドルを返します。この例では、変数に割り当てられています。 $ch.

次に、cURL 関数を使用してリクエストを実行します。 カール_exec、記述子がパラメータとして渡されます。

すべては非常に論理的ですが、このスクリプトが実行されると、サイトのコンテンツがページに表示されます。 しかし、コンテンツを表示するのではなく、(後続の処理または解析のために) 変数に書き込みたい場合はどうすればよいでしょうか。

スクリプトに少し追加してみましょう。

0) ( echo "カール エラー: " .curl_error($ch); )curl_close($ch); ?>

ラインがございます curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);.

カール_セトップト- オプションを設定します。 オプションの完全なリストは、次のページにあります。

ゲストから隠された

$response_data =curl_exec($ch);

これで、スクリプト値が $response_data 変数に割り当てられ、これを使用してさらなる操作を実行できるようになります。 たとえば、その内容を表示できます。

ステッチ

If (curl_errno($ch) > 0) ( echo "Curl エラー: " .curl_error($ch); )

エラーが発生した場合のデバッグに役立ちます。

コマンドラインで cURL を使用してデータを取得する

コマンドラインに次のように入力します。

代わりにどこで mi-al.ru- ウェブサイトのアドレス。

結果を画面に表示するのではなく、データを変数にコピーする必要がある場合は、次のようにします。

Temp="カールミアル.ru"

ただし、一部のデータは引き続き表示されます。

表示されないようにするには、キーを追加します -s:

Temp="curl -s mi-al.ru"

記録された内容を確認できます。

エコー $temp | 少ない

基本認証とHTTP認証

認証とは、簡単に言えば、ユーザー名とパスワードを入力することです。

基本認証はサーバーベースの認証です。 このために、2 つのファイルが作成されます。 .htaccessそして .htpasswd

.htaccessファイルの内容はこんな感じです

AuthName "登録ユーザーのみ!" AuthType Basic require valid-user AuthUserFile /home/freeforum.biz/htdocs/.htpassw


.htpasswd ファイルの内容は次のようなものです。

ミアル:CRdiI.ZrZQRRc

それらの。 ログインとパスワードのハッシュ。

パスワードで保護されたフォルダーにアクセスしようとすると、ブラウザーに次のようなメッセージが表示されます。

HTTP 認証は、Web サイト上のフォームにログイン名とパスワードを入力する場合に当てはまります。 メールやフォーラムなどにログインするときに使用される認証です。

基本的な cURL 認証 (PHP)

ウェブサイトがあります

ゲストから隠された

最初のスクリプトを試してみましょう。

0) ( echo "Curl エラー: " .curl_error($ch); ) else ( echo $response_data; )curl_close($ch); ?>

スクリプトはエラーがないと信じていますが、出力結果はまったく気に入りません。

次の 2 行を追加します。

Curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); curl_setopt($ch, CURLOPT_USERPWD, "ru-board:ru-board");

最初の行では、認証タイプとして基本を設定します。 2 行目には、コロンで区切られた名前とパスワードが含まれます (この例では、名前とパスワードは同じです - ru-board)。 次のようになりました。

0) ( echo "Curl エラー: " .curl_error($ch); ) else ( echo $response_data; )curl_close($ch); ?> 試してみましょう: 30946 素晴らしい! 基本的な cURL 認証 (コマンド ライン上) 同じことをコマンド ラインでも次の 1 行で実現できます。curl -u ru-board:ru-board http://62.113.208.29/Update_FED_DAYS/

認証タイプを指定するのを忘れたわけではありません。cURL では基本認証タイプがデフォルトであるだけです。

コマンド ラインですべてがすぐにうまくいったので、イライラして次のプログラムを作成しました。 彼女はサイトに接続し、最新のアップデートをダウンロードします。

Temp=`curl -s -u ru-board:ru-board http://62.113.208.29/Update_FED_DAYS/ | grep -E -o "Update_FED_201(1).(2).(2).7z" | ユニーク | 末尾 -n 1`; カール -o $temp -u ru-board:ru-board http://62.113.208.29/Update_FED_DAYS/$temp

さらにいくつかのコマンドを追加するだけで、次のことが可能になります。

  • アーカイブを指定されたディレクトリに解凍します。
  • ConsultantPlus のアップデートを開始します (これらはそのアップデートです)。
  • 利用可能な最新のアップデートがすでにダウンロードされているか、新しいアップデートが登場したかを確認できます。
  • 毎日の更新のためにすべてを Cron に追加します。
HTTP 認証の cURL

PHP での HTTP cURL 認証

私たちは知る必要がある:

  • 認証データの送信先アドレス
  • 送信メソッド GET または POST
  • ログイン
  • パスワード
このデータだけでは十分でない場合もあります。 それを理解しましょう。

データを送信する必要があるアドレスは、認証フォームから取得できます。 例えば:

物件を検討中です アクション。 それらの。 最後のページは ログイン.php。 このように完全なアドレスが必要です

ゲストから隠された

ここで送信方法も確認できます。 メソッド = "投稿"

ログイン名とパスワードも知っています: admin と qwerasdfzxcv
それらの。 POST メソッドを使用して、フォームからサーバーに文字列が送信されます。 理論的には、新しい行を追加した前のスクリプトは機能するはずです。 それらの。 認証が行われる必要があります。

0) ( echo "Curl エラー: " .curl_error($ch); ) else ( )curl_close($ch); ?>

スクリプト内の改行

curl_setopt($ch, CURLOPT_POSTFIELDS, "LOGIN_USER=admin&LOGIN_PASSWD=qwerasdfzxcv");

ここ カール_セトップト- cURL のオプションを設定するための関数としてすでによく知られています。 CURLOPT_POSTFIELDS- これは設定しているオプションの名前です。 CURLOPT_POSTFIELDS POST メソッドを使用して転送されるすべてのデータが含まれます。 まあ、ライン自体は LOGIN_USER=管理者&LOGIN_PASSWD=qwerasdfzxcv- これは当社が送信するデータと同じです。

フォームを注意深く調べると、隠しフィールドも含まれていることがわかります。 データを JavaScript で処理したり補完したりすることもできますが、私はもっと単純な方法を好みます。

Wiresharkを使用しています。 このプログラムはトラフィックを盗聴 (傍受) するように設計されています。 そして、その中で、正確に何がサイトに送信されているかを確認するのが非常に便利です。

この小さなビデオをご覧ください:


それらの。 データが転送されるアドレスで、私は正しいと思いました。 しかし、送信された文字列はさらに複雑であることが判明しました。

正しいパラメータを入力し、ログインするだけでなくルーターから何かを受け取るようにスクリプトを少し変更しました。

0) ( echo "Curl エラー: " .curl_error($ch); ) else ( $target_url2 = "http://188.35.8.64:8080/bsc_wlan.php"; $ch2 =curl_init($target_url2);curl_setopt($ ch2, CURLOPT_RETURNTRANSFER, 1); $response_data2 =curl_exec($ch2); |f.ssid.value = "(.*)";|", $response_data2, $results2); , "", $results2); $results2 = str_replace("";", "", $results2); echo "Wi-Fi ネットワーク名: $result2
"; preg_match("|f_wpa.wpapsk1.value(.*)";|", $response_data2, $results3); $results3 = str_replace("f_wpa.wpapsk1.value", "", $results3); $results3 = str_replace("="", "", $results3); $results3 = str_replace("";", "", $results3); echo "Wi-Fi ネットワークのパスワード: $result3"; )curl_close($ch); ?>

ちなみに、所有者がパスワードを更新した場合(ただしファームウェアは更新しなかった場合)、新しいパスワードはいつでも次の場所で確認できます。

ゲストから隠された

(これは、D-Link DIR-300、D-Link DIR-320、および D-Link DAP-1353 ルーターの既知の脆弱性です)。

コマンドラインでの HTTP cURL 認証

完全なアドレスと送信される文字列はすでにわかっています。 それは簡単です:

Curl --data "ACTION_POST=LOGIN&FILECODE=&VERIFICATION_CODE=&LOGIN_USER=admin&LOGIN_PASSWD=qwerasdfzxcv&login=Log+In+&VER_CODE= http://188.35.8.64:8080/login.php

これらの期限についてはすでに検討済みであるため、すべてが明らかであると思います。 分からない人がいたらコメントで聞いてください。

cURL を使用してデータを取得および解析する例は、次のコマンド セットです。

Curl -s --data "ACTION_POST=LOGIN&FILECODE=&VERIFICATION_CODE=&LOGIN_USER=admin&LOGIN_PASSWD=qwerasdfzxcv&login=Log+In+&VER_CODE=" http://188.35.8.64:8080/login.php > /dev/null && echo -e "nn " && echo "Wi-Fi ネットワーク名" &&curl -s http://188.35.8.64:8080/bsc_wlan.php | grep -E "f.ssid.value = "(.)*";" | sed "s/f.ssid.value = "//" | sed "s/";//" && echo "Wi-Fi ネットワーク パスワード" &&curl -s http://188.35.8.64:8080/bsc_wlan.php | grep -E "f_wpa.wpapsk1.(.)*";" | sed "s/f_wpa.wpapsk1.value//" | sed "s/";//" | sed "s/="//"

この見出しは次のように書くのがより正確です:「複雑な」認可ケース。 それらの。 「複雑な」という単語を引用符で囲みます。 一見しただけでは複雑に見えますが、送信がどこで行われるか、フィールド名は何か、正確に何が送信されるかなどが明確でない場合に限られます。

しかし、実際には、それらはすべて POST メソッドまたは GET メソッドに帰着します。 正確に何が送信されているかを理解するには、フォームを含むページをディスクに保存し、送信ボタンに送信するために生成されたデータを表示する機能を追加します。 または、さらに単純です - 私のように、Wireshark。

データは正しいが認証が行われない場合は、次の方向に進む必要があります。

  • 正しいリファラー文字列を設定する
  • 「正しい」ユーザー エージェント文字列を設定します。
これらはすべて、基本的な cURL メソッドを使用して実行できますが、ここでは説明しません。 レッスンはすでに十分に長くなりましたが、cURL を使ったいくつかのトリックも紹介したいと思います。

ヒントとコツ cURL

cURL と CURLOPT_COOKIEJAR に加えて Cookie の受信

cURL が Cookie を正しく処理すること (保存すること、サーバーが要求したときに使用することなど) はすでに明らかだと思います。しかし、場合によっては Cookie を保存する必要があります。 これには CURLOPT_COOKIEJAR というオプションがありますが、常に使用できるとは限りません。 これが私たちの最初のトリックの目的です。

サーバー上での PHP の構成方法が原因で、CURLOPT_COOKIEJAR (受信した Cookie をファイルに保存できる) や CURLOPT_COOKIEFILE (ファイルからの Cookie を使用できる) などのオプションが利用できない場合があります。 なぜなら これらのオプションを使用すると、サーバーからあらゆるファイルを盗むことができると彼らは言います。 この問題の解決策は次のとおりです。

1) CURLOPT_FOLLOWLOCATION は使用しません
2)curl_setopt($ch, CURLOPT_HEADER, 1) を使用します。
3) 次のようにヘッダーから Cookie を収集します。

Preg_match_all("|Set-Cookie: (.*);|U", $content, $results); $cookies = implode(";", $results);

4)curl_setopt($ch, CURLOPT_COOKIE, $cookies); を使用して設定します。

2つ目のヒント。 私たちは攻撃者から被害者に変わることができます。 中間者攻撃の被害者になることを避けるために、これを行います。

皆さん、CURLOPT_SSL_VERIFYPEER 設定を false または 0 に設定するのはやめてください。PHP インストールに最新のルート CA 証明書のセットがない場合は、curl Web サイトから証明書をダウンロードしてサーバーに保存してください。

ゲストから隠された

次に、php.ini ファイルにパスを設定します (Windows など)。

Curl.cainfo=c:phpcacert.pem

CURLOPT_SSL_VERIFYPEER を無効にすると、中間者 (MITM) 攻撃が可能になりますが、これは望ましくないことです。

さて、今日の最後のヒントです。 多数の非同期カールリクエストが可能であることをご存知ですか?

このために使用できます カールマルチ初期化。 詳細とサンプルコードは公式ドキュメントにあります

ゲストから隠された

ゲストから隠された


コマンドラインの cURL について

ゲストから隠された


cURL レッスンの 2 番目の部分も、ロシア語で読むために準備されています: ""。

実際の例: IP アドレスを変更するには、ルーター (モデム) を再起動する必要があります。 これを行うには、ルーターにログインし、メンテナンス ページに移動して、「再起動」ボタンをクリックする必要があります。 このアクションを複数回実行する必要がある場合は、手順を繰り返す必要があります。 同意します。このルーチンを毎回手動で実行する必要はありません。 cURL を使用すると、これらすべてを自動化できます。 いくつかの cURL コマンドを使用するだけで、ルーター上で認証を取得し、タスクを完了できます。

  • cURL は、コマンド ラインで Web サイトからデータを取得する場合に便利です。
もう 1 つの実践的な例: 複数のサイトの一般的な統計の表示を実装したいと考えています。 cURL を使用すると、これは完全に簡単なタスクになります。cURL を使用して、統計収集サービス (必要な場合) で認証し、(再び cURL コマンドを使用して) 必要なページを取得し、必要なデータを解析します。 この手順がすべてのサイトに対して繰り返され、最終結果が追加されて表示されます。

それらの。 cURL を使用するケースは非常に現実的ですが、ほとんどの場合、プログラムで cURL を使用するプログラマーが cURL を必要とします。

CURL は多くのプロトコルと認証方法をサポートし、ファイルを転送でき、Cookie を正しく処理し、SSL 証明書、プロキシなどをサポートします。

PHP およびコマンドラインの cURL

cURL は、PHP スクリプトとコマンド ラインという 2 つの主な方法で使用できます。

サーバー上の PHP で cURL を有効にするには、php.ini ファイル内の行のコメントを解除する必要があります。

拡張子=php_curl.dll

そしてサーバーを再起動します。

Linux では、curl パッケージをインストールする必要があります。

Debian、Ubuntu、または Linux Mint の場合:

$ sudo apt-get インストールカール


Fedora、CentOS、または RHEL の場合:

$ sudo yum インストールカール

PHP とコマンド ラインでの使用の違いを明確に確認するために、同じタスクを 2 回実行します。最初は PHP スクリプトで、次にコマンド ラインでです。 混乱しないようにしましょう。

cURL を使用したデータの取得

PHP で cURL を使用してデータを取得する

PHP の例:

すべては非常にシンプルです:
$target_url- 興味のあるサイトのアドレス。 サイト アドレスの後にコロンを入力してポート アドレスを追加できます (ポートが標準のものと異なる場合)。

カール初期化- 新しいセッションを初期化し、ハンドルを返します。この例では、変数に割り当てられています。 $ch.

次に、cURL 関数を使用してリクエストを実行します。 カール_exec、記述子がパラメータとして渡されます。

すべては非常に論理的ですが、このスクリプトが実行されると、サイトのコンテンツがページに表示されます。 しかし、コンテンツを表示するのではなく、(後続の処理または解析のために) 変数に書き込みたい場合はどうすればよいでしょうか。

スクリプトに少し追加してみましょう。

0) ( echo "カール エラー: " .curl_error($ch); )curl_close($ch); ?>

ラインがございます curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);.

カール_セトップト- オプションを設定します。 オプションの完全なリストは、次のページにあります。

ゲストから隠された

$response_data =curl_exec($ch);

これで、スクリプト値が $response_data 変数に割り当てられ、これを使用してさらなる操作を実行できるようになります。 たとえば、その内容を表示できます。

ステッチ

If (curl_errno($ch) > 0) ( echo "Curl エラー: " .curl_error($ch); )

エラーが発生した場合のデバッグに役立ちます。

コマンドラインで cURL を使用してデータを取得する

コマンドラインに次のように入力します。

代わりにどこで mi-al.ru- ウェブサイトのアドレス。

結果を画面に表示するのではなく、データを変数にコピーする必要がある場合は、次のようにします。

Temp="カールミアル.ru"

ただし、一部のデータは引き続き表示されます。

表示されないようにするには、キーを追加します -s:

Temp="curl -s mi-al.ru"

記録された内容を確認できます。

エコー $temp | 少ない

基本認証とHTTP認証

認証とは、簡単に言えば、ユーザー名とパスワードを入力することです。

基本認証はサーバーベースの認証です。 このために、2 つのファイルが作成されます。 .htaccessそして .htpasswd

.htaccessファイルの内容はこんな感じです

AuthName "登録ユーザーのみ!" AuthType Basic require valid-user AuthUserFile /home/freeforum.biz/htdocs/.htpassw


.htpasswd ファイルの内容は次のようなものです。

ミアル:CRdiI.ZrZQRRc

それらの。 ログインとパスワードのハッシュ。

パスワードで保護されたフォルダーにアクセスしようとすると、ブラウザーに次のようなメッセージが表示されます。

HTTP 認証は、Web サイト上のフォームにログイン名とパスワードを入力する場合に当てはまります。 メールやフォーラムなどにログインするときに使用される認証です。

基本的な cURL 認証 (PHP)

ウェブサイトがあります

ゲストから隠された

最初のスクリプトを試してみましょう。

0) ( echo "Curl エラー: " .curl_error($ch); ) else ( echo $response_data; )curl_close($ch); ?>

スクリプトはエラーがないと信じていますが、出力結果はまったく気に入りません。

次の 2 行を追加します。

Curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); curl_setopt($ch, CURLOPT_USERPWD, "ru-board:ru-board");

最初の行では、認証タイプとして基本を設定します。 2 行目には、コロンで区切られた名前とパスワードが含まれます (この例では、名前とパスワードは同じです - ru-board)。 次のようになりました。

0) ( echo "Curl エラー: " .curl_error($ch); ) else ( echo $response_data; )curl_close($ch); ?> 試してみましょう: 30946 素晴らしい! 基本的な cURL 認証 (コマンド ライン上) 同じことをコマンド ラインでも次の 1 行で実現できます。curl -u ru-board:ru-board http://62.113.208.29/Update_FED_DAYS/

認証タイプを指定するのを忘れたわけではありません。cURL では基本認証タイプがデフォルトであるだけです。

コマンド ラインですべてがすぐにうまくいったので、イライラして次のプログラムを作成しました。 彼女はサイトに接続し、最新のアップデートをダウンロードします。

Temp=`curl -s -u ru-board:ru-board http://62.113.208.29/Update_FED_DAYS/ | grep -E -o "Update_FED_201(1).(2).(2).7z" | ユニーク | 末尾 -n 1`; カール -o $temp -u ru-board:ru-board http://62.113.208.29/Update_FED_DAYS/$temp

さらにいくつかのコマンドを追加するだけで、次のことが可能になります。

  • アーカイブを指定されたディレクトリに解凍します。
  • ConsultantPlus のアップデートを開始します (これらはそのアップデートです)。
  • 利用可能な最新のアップデートがすでにダウンロードされているか、新しいアップデートが登場したかを確認できます。
  • 毎日の更新のためにすべてを Cron に追加します。
HTTP 認証の cURL

PHP での HTTP cURL 認証

私たちは知る必要がある:

  • 認証データの送信先アドレス
  • 送信メソッド GET または POST
  • ログイン
  • パスワード
このデータだけでは十分でない場合もあります。 それを理解しましょう。

データを送信する必要があるアドレスは、認証フォームから取得できます。 例えば:

物件を検討中です アクション。 それらの。 最後のページは ログイン.php。 このように完全なアドレスが必要です

ゲストから隠された

ここで送信方法も確認できます。 メソッド = "投稿"

ログイン名とパスワードも知っています: admin と qwerasdfzxcv
それらの。 POST メソッドを使用して、フォームからサーバーに文字列が送信されます。 理論的には、新しい行を追加した前のスクリプトは機能するはずです。 それらの。 認証が行われる必要があります。

0) ( echo "Curl エラー: " .curl_error($ch); ) else ( )curl_close($ch); ?>

スクリプト内の改行

curl_setopt($ch, CURLOPT_POSTFIELDS, "LOGIN_USER=admin&LOGIN_PASSWD=qwerasdfzxcv");

ここ カール_セトップト- cURL のオプションを設定するための関数としてすでによく知られています。 CURLOPT_POSTFIELDS- これは設定しているオプションの名前です。 CURLOPT_POSTFIELDS POST メソッドを使用して転送されるすべてのデータが含まれます。 まあ、ライン自体は LOGIN_USER=管理者&LOGIN_PASSWD=qwerasdfzxcv- これは当社が送信するデータと同じです。

フォームを注意深く調べると、隠しフィールドも含まれていることがわかります。 データを JavaScript で処理したり補完したりすることもできますが、私はもっと単純な方法を好みます。

Wiresharkを使用しています。 このプログラムはトラフィックを盗聴 (傍受) するように設計されています。 そして、その中で、正確に何がサイトに送信されているかを確認するのが非常に便利です。

この小さなビデオをご覧ください:


それらの。 データが転送されるアドレスで、私は正しいと思いました。 しかし、送信された文字列はさらに複雑であることが判明しました。

正しいパラメータを入力し、ログインするだけでなくルーターから何かを受け取るようにスクリプトを少し変更しました。

0) ( echo "Curl エラー: " .curl_error($ch); ) else ( $target_url2 = "http://188.35.8.64:8080/bsc_wlan.php"; $ch2 =curl_init($target_url2);curl_setopt($ ch2, CURLOPT_RETURNTRANSFER, 1); $response_data2 =curl_exec($ch2); |f.ssid.value = "(.*)";|", $response_data2, $results2); , "", $results2); $results2 = str_replace("";", "", $results2); echo "Wi-Fi ネットワーク名: $result2
"; preg_match("|f_wpa.wpapsk1.value(.*)";|", $response_data2, $results3); $results3 = str_replace("f_wpa.wpapsk1.value", "", $results3); $results3 = str_replace("="", "", $results3); $results3 = str_replace("";", "", $results3); echo "Wi-Fi ネットワークのパスワード: $result3"; )curl_close($ch); ?>

ちなみに、所有者がパスワードを更新した場合(ただしファームウェアは更新しなかった場合)、新しいパスワードはいつでも次の場所で確認できます。

ゲストから隠された

(これは、D-Link DIR-300、D-Link DIR-320、および D-Link DAP-1353 ルーターの既知の脆弱性です)。

コマンドラインでの HTTP cURL 認証

完全なアドレスと送信される文字列はすでにわかっています。 それは簡単です:

Curl --data "ACTION_POST=LOGIN&FILECODE=&VERIFICATION_CODE=&LOGIN_USER=admin&LOGIN_PASSWD=qwerasdfzxcv&login=Log+In+&VER_CODE= http://188.35.8.64:8080/login.php

これらの期限についてはすでに検討済みであるため、すべてが明らかであると思います。 分からない人がいたらコメントで聞いてください。

cURL を使用してデータを取得および解析する例は、次のコマンド セットです。

Curl -s --data "ACTION_POST=LOGIN&FILECODE=&VERIFICATION_CODE=&LOGIN_USER=admin&LOGIN_PASSWD=qwerasdfzxcv&login=Log+In+&VER_CODE=" http://188.35.8.64:8080/login.php > /dev/null && echo -e "nn " && echo "Wi-Fi ネットワーク名" &&curl -s http://188.35.8.64:8080/bsc_wlan.php | grep -E "f.ssid.value = "(.)*";" | sed "s/f.ssid.value = "//" | sed "s/";//" && echo "Wi-Fi ネットワーク パスワード" &&curl -s http://188.35.8.64:8080/bsc_wlan.php | grep -E "f_wpa.wpapsk1.(.)*";" | sed "s/f_wpa.wpapsk1.value//" | sed "s/";//" | sed "s/="//"

この見出しは次のように書くのがより正確です:「複雑な」認可ケース。 それらの。 「複雑な」という単語を引用符で囲みます。 一見しただけでは複雑に見えますが、送信がどこで行われるか、フィールド名は何か、正確に何が送信されるかなどが明確でない場合に限られます。

しかし、実際には、それらはすべて POST メソッドまたは GET メソッドに帰着します。 正確に何が送信されているかを理解するには、フォームを含むページをディスクに保存し、送信ボタンに送信するために生成されたデータを表示する機能を追加します。 または、さらに単純です - 私のように、Wireshark。

データは正しいが認証が行われない場合は、次の方向に進む必要があります。

  • 正しいリファラー文字列を設定する
  • 「正しい」ユーザー エージェント文字列を設定します。
これらはすべて、基本的な cURL メソッドを使用して実行できますが、ここでは説明しません。 レッスンはすでに十分に長くなりましたが、cURL を使ったいくつかのトリックも紹介したいと思います。

ヒントとコツ cURL

cURL と CURLOPT_COOKIEJAR に加えて Cookie の受信

cURL が Cookie を正しく処理すること (保存すること、サーバーが要求したときに使用することなど) はすでに明らかだと思います。しかし、場合によっては Cookie を保存する必要があります。 これには CURLOPT_COOKIEJAR というオプションがありますが、常に使用できるとは限りません。 これが私たちの最初のトリックの目的です。

サーバー上での PHP の構成方法が原因で、CURLOPT_COOKIEJAR (受信した Cookie をファイルに保存できる) や CURLOPT_COOKIEFILE (ファイルからの Cookie を使用できる) などのオプションが利用できない場合があります。 なぜなら これらのオプションを使用すると、サーバーからあらゆるファイルを盗むことができると彼らは言います。 この問題の解決策は次のとおりです。

1) CURLOPT_FOLLOWLOCATION は使用しません
2)curl_setopt($ch, CURLOPT_HEADER, 1) を使用します。
3) 次のようにヘッダーから Cookie を収集します。

Preg_match_all("|Set-Cookie: (.*);|U", $content, $results); $cookies = implode(";", $results);

4)curl_setopt($ch, CURLOPT_COOKIE, $cookies); を使用して設定します。

2つ目のヒント。 私たちは攻撃者から被害者に変わることができます。 中間者攻撃の被害者になることを避けるために、これを行います。

皆さん、CURLOPT_SSL_VERIFYPEER 設定を false または 0 に設定するのはやめてください。PHP インストールに最新のルート CA 証明書のセットがない場合は、curl Web サイトから証明書をダウンロードしてサーバーに保存してください。

ゲストから隠された

次に、php.ini ファイルにパスを設定します (Windows など)。

Curl.cainfo=c:phpcacert.pem

CURLOPT_SSL_VERIFYPEER を無効にすると、中間者 (MITM) 攻撃が可能になりますが、これは望ましくないことです。

さて、今日の最後のヒントです。 多数の非同期カールリクエストが可能であることをご存知ですか?

このために使用できます カールマルチ初期化。 詳細とサンプルコードは公式ドキュメントにあります

ゲストから隠された

ゲストから隠された


コマンドラインの cURL について

ゲストから隠された


cURL レッスンの 2 番目の部分も、ロシア語で読むために準備されています: ""。

(PHP 4 >= 4.0.2、PHP 5、PHP 7)

curl_setopt — CURLセッションのパラメータを設定します

パラメータの一覧

cURL ハンドルは次から取得されます。 curl_init().

設定するパラメータ CURLOPT_XXX.

オプションパラメータの値。

ブール:

パラメータ ノート
CURLOPT_AUTOREFERER 真実自動フィールド設定用 参照者:ヘッダーによってリダイレクトされたリクエスト内 位置:.
CURLOPT_BINARYTRANSFER 真実定数を使用する場合に生の応答を返す CURLOPT_RETURNTRANSFER. PHP 5.1.3 以降、このオプションは必要なくなりました。このオプションを使用すると、常に生の出力が返されます。 CURLOPT_RETURNTRANSFER.
CURLOPT_COOKIESESSION 真実現在のセッションに Cookie の新しい「セッション」を開始するように指示します。 これにより、libcurl は前のセッションからロードされるはずの「セッション」Cookie を無視します。 デフォルトでは、libcurl は、「セッション」であるかどうかに関係なく、常にすべての Cookie を保存およびロードします。 「セッション」Cookie は有効期限のない Cookie であり、現在の「セッション」の間のみ存在する必要があります。
CURLOPT_CERTINFO 真実 SSL証明書情報をストリームに出力するには 標準エラー安全な接続を実現します。 cURL 7.19.1 で追加されました。 PHP 5.3.2 以降で利用可能です。 正しく動作するには、このオプションを有効にする必要があります CURLOPT_VERBOSE.
CURLOPT_CONNECT_ONLY 真実必要なプロキシ認証と接続セットアップを実行するようにライブラリに指示しますが、データは送信しません。 このオプションは、HTTP、SMTP、および POP3 に対して実装されます。 7.15.2で追加されました。 PHP 5.5.0 から利用可能です。
CURLOPT_CRLF 真実 Unix の行末を CRLF に変換します。
CURLOPT_DNS_USE_GLOBAL_CACHE 真実グローバルDNSキャッシュを使用します。 このオプションはスレッドセーフではなく、デフォルトで有効になっています。
CURLOPT_FAILONERROR 真実受信した HTTP コードが 400 以上の場合、失敗に関する詳細レポートが表示されます。デフォルトの動作では、コードを無視して通常どおりページが返されます。
CURLOPT_FILETIME 真実リモートドキュメントの変更日の取得を試みます。 この値は、関数の CURLINFO_FILETIME パラメータを使用して取得できます。 curl_getinfo().
CURLOPT_FOLLOWLOCATION 真実任意の見出しに従う "位置: "サーバーによって応答で送信されます (これは再帰的に発生することに注意してください。PHP は送信されたヘッダーをすべて追跡します) "位置: "、定数が設定されている場合を除く CURLOPT_MAXREDIRS).
CURLOPT_FORBID_REUSE 真実処理が完了した後に接続を強制的に閉じて再利用できないようにします。
CURLOPT_FRESH_CONNECT 真実キャッシュされた接続の代わりに新しい接続の使用を強制します。
CURLOPT_FTP_USE_EPRT 真実アクティブな FTP アップロードに EPRT (および LPRT) を使用します。 使用 間違い EPRT と LPRT を無効にし、PORT のみを使用するには。
CURLOPT_FTP_USE_EPSV 真実 FTP 転送中の EPSV コマンドの初期テスト用。 コマンドが失敗した場合は、PASV にフォールバックします。 にインストールします 間違い EPSVを無効にします。
CURLOPT_FTP_CREATE_MISSING_DIRS 真実 FTP 操作で存在しないパスが見つかった場合に、欠落しているディレクトリを作成します。
CURLOPT_FTPAPPEND 真実リモート ファイルを既存のファイルに上書きするのではなく、最後まで書き込みます。
CURLOPT_TCP_NODELAY TCP_NODELAY オプションを設定するかクリアするかを永続的に指定します (1 = 設定、0 = クリア)。 デフォルトでは、このオプションはオフになっています。 libcurl 7.11.2 以降でビルドされたバージョンでは、PHP 5.2.1 から利用できます。
CURLOPT_FTPASCII ニックネーム CURLOPT_TRANSFERTEXT。 代わりにこれを使用してください。
CURLOPT_FTPLISTONLY 真実 FTP ディレクトリから名前のリストのみを返します。
CURLOPT_HEADER 真実出力にヘッダーを含めます。
CURLINFO_HEADER_OUT 真実ハンドルのクエリ文字列を追跡します。 PHP 5.1.3 以降で利用可能です。 プレフィックス カールリンフォ_具体的に使われます。
CURLOPT_HTTPGET 真実 HTTP リクエスト メソッドを GET メソッドにリセットします。 GET がデフォルトであるため、このパラメータはリクエストメソッドが以前に変更されている場合にのみ必要です。
CURLOPT_HTTPPROXYTUNNEL 真実指定された HTTP プロキシを介してトンネルします。
カールプト_ミュート 真実 cURL 関数のメッセージを完全に無効にします。 cURL 7.15.5 で削除されました (CURLOPT_RETURNTRANSFER オプションを使用できます)
CURLOPT_NETRC 真実接続を確立しているリモート サイトのログインとパスワードの ~/.netrc ファイルを読み取ります。
CURLOPT_NOBODY 真実出力から応答本文を除外します。 リクエストメソッドはHEADに設定されます。 この設定を次のように変更すると、 間違い GET に戻すことはしません。
CURLOPT_NOPROGRESS

真実 cURL 転送の進行状況インジケーターを無効にします。

コメント:

PHP はこのパラメータを自動的に次のように設定します。 真実、デバッグ目的でのみ変更してください。

CURLOPT_NOSIGNAL 真実 PHP プロセスにシグナルを送信する cURL 関数を無視します。 このオプションはマルチスレッド SAPI ではデフォルトで有効になっており、タイムアウト パラメータが正しく動作できるようになります。
CURLOPT_POST 真実通常の HTTP POST を使用します。 この POST メソッドは通常の 、HTML フォームでよく使用されます。
CURLOPT_PUT 真実 HTTP PUT メソッドを使用してファイルをダウンロードします。 使用するファイルはオプションを使用してインストールする必要があります CURLOPT_INFILEそして CURLOPT_INFILESIZE.
CURLOPT_RETURNTRANSFER 真実転送の結果を文字列として返すには curl_exec()ブラウザに直接出力する代わりに。
CURLOPT_SAFE_UPLOAD 真実プレフィックスのサポートを無効にするには @ ダウンロードされたファイルの場合 CURLOPT_POSTFIELDS、つまり、渡された値は @ フィールドとして安全に送信できます。 プレフィックスの代わりに、オプションを使用できます CURLファイル d. PHP 5.5.0 でデフォルト値で追加されました 間違い。 PHP 5.6.0 では、デフォルトで次のようになりました。 真実.
CURLOPT_SSL_VERIFYPEER 間違い cURL によるホスト証明書のチェックを停止します。 検証する代替証明書はパラメータを使用して指定できます。 CURLOPT_CAINFOまたはパラメータで指定された証明書のあるディレクトリ CURLOPT_CAPATH. デフォルトは 真実 cURL バージョン 7.10 以降。 デフォルトのディストリビューションは、cURL バージョン 7.10 以降にインストールされます。
CURLOPT_TRANSFERTEXT 真実 FTP 転送に ASCII モードを使用します。 LDAP を使用すると、データは HTML ではなくプレーン テキストで返されます。 Windows システムでは、スレッド 標準出力バイナリモードには設定されません。
CURLOPT_UNRESTRICTED_AUTH 真実リダイレクト中にログインとパスワードの送信を続けるため (使用時) CURLOPT_FOLLOWLOCATION)、ホスト名が変更された場合でも。
CURLOPT_UPLOAD 真実ファイルをサーバーにアップロードする準備をします。
CURLOPT_VERBOSE 真実追加情報を表示します。 出力をストリームに書き込みます 標準エラー、またはパラメータで指定されたファイル CURLOPT_STDERR.

次のオプション パラメーター値の場合、値パラメーターは次のタイプである必要があります。 整数:

パラメータ 設定値 値 ノート
CURLOPT_BUFFERSIZE 各読み取りに使用されるバッファのサイズ。 ただし、このリクエストが完了するという保証はありません。 cURL 7.10 で追加されました。
CURLOPT_CLOSEPOLICY 定数の 1 つ カールクローズポリシー_*.

コメント:

このオプションは cURL に実装されておらず、機能しなかったため、非推奨になりました。

PHP 5.6.0 では削除されました。
CURLOPT_CONNECTTIMEOUT 接続を試行するときに待機する秒数。 無期限に待機するには 0 を使用します。
CURLOPT_CONNECTTIMEOUT_MS 接続を試行するときに待機するミリ秒数。 無期限に待機するには 0 を使用します。 libcurl がシステムの標準ネーム リゾルバーを使用してコンパイルされている場合でも、接続ではタイムアウトとして丸 1 秒の待機が使用され、最小許容タイムアウトは 1 秒です。 cURL バージョン 7.16.2 で追加されました。 PHP 5.2.3 以降で利用可能です。
CURLOPT_DNS_CACHE_TIMEOUT DNS レコードがメモリに保存される秒数。 デフォルトでは、このパラメータは 120 (2 分) です。
CURLOPT_FTPSSLAUTH FTP 認証方法 (アクティブ モード): CURLFTPAUTH_SSL(SSL が最初にチェックされます)、 CURLFTPAUTH_TLS(TLS が最初にチェックされます) または CURLFTPAUTH_DEFAULT(cURL がそれ自体で決定します)。 cURL バージョン 7.12.2 で追加されました。
CURLOPT_HTTP_VERSION CURL_HTTP_VERSION_NONE (デフォルトでは、CURL が使用するバージョンを選択します)、CURL_HTTP_VERSION_1_0 (HTTP/1.0 を強制)、または CURL_HTTP_VERSION_1_1 (HTTP/1.1 を強制)。
CURLOPT_HTTPAUTH

ビット単位の演算子を使用できます | (または) いくつかの方法を組み合わせます。 この場合、cURL はサポートされている認証方法をサーバーにポーリングし、最適な認証方法を選択します。

CURLAUTH_ANY はエイリアスです CURLAUTH_BASIC | CURLAUTH_DIGEST | CURLAUTH_GSSNEGOTIATE | CURLAUTH_NTLM.

CURLAUTH_ANYSAFE はエイリアスです CURLAUTH_DIGEST | CURLAUTH_GSSNEGOTIATE | CURLAUTH_NTLM.

CURLOPT_INFILESIZE ファイルをリモート サーバーにアップロードするときに予想されるファイル サイズ (バイト単位)。 送信されるデータは結果に依存するため、このオプションを使用しても、この値を超えるデータの送信は停止されないことに注意してください。 CURLOPT_READFUNCTION.
CURLOPT_LOW_SPEED_LIMIT データ転送速度の上限しきい値 (バイト/秒)。 検証は次の範囲内で行われます CURLOPT_LOW_SPEED_TIME秒が経過すると、PHP は転送が遅すぎると判断し、転送を中止します。
CURLOPT_LOW_SPEED_TIME 転送速度が超えてはならない最大秒数 CURLOPT_LOW_SPEED_LIMITそうでない場合、PHP は転送が遅すぎるとマークし、転送を停止します。
CURLOPT_MAXCONNECTS 永続的な接続の最大数。 制限に達すると、パラメータを使用してどの接続を閉じるかを決定します。 CURLOPT_CLOSEPOLICY.
CURLOPT_MAXREDIRS 受け入れられるリダイレクトの最大数。 このオプションをオプションと組み合わせて使用​​します CURLOPT_FOLLOWLOCATION.
CURLOPT_PORT 代替接続ポート。
CURLOPT_POSTREDIR オプションが有効な場合に HTTP POST メソッドを処理するかどうかを指定する、1 (301 Moved Permanently)、2 (302 Found)、および 4 (303 See Other) を含むビットマスク CURLOPT_FOLLOWLOCATION指定されたタイプのリダイレクトが発生した場合。 cURL 7.19.1 で追加されました。 PHP 5.3.2 以降で利用可能です。
CURLOPT_PROTOCOLS

値のビットマスク カールプロト_*。 このマスクは、libcurl で使用されるプロトコルを制限します。 これにより、libcurl を多数のプロトコルで動作させ、特定の転送の操作をそれらのサブセットのみに制限することができます。 デフォルトでは、libcurl はサポートされているすべてのプロトコルを使用します。 パラメータも参照 CURLOPT_REDIR_PROTOCOLS.

正しいプロトコル値: CURLPROTO_HTTP 、 CURLPROTO_HTTPS 、 CURLPROTO_FTP 、 CURLPROTO_FTPS 、 CURLPROTO_SCP 、 CURLPROTO_SFTP 、 CURLPROTO_TELNET 、 CURLPROTO_LDAP 、 CURLPROTO_LDAPS 、 CURLPROTO_DICT 、 CURLPROTO_FILE 、 LPROTO_TFTP 、 CURLPROTO_ALL

CURLOPT_PROXYAUTH プロキシ サーバーに接続するときに使用される HTTP 認証方法。 パラメータについて説明したのと同じビットマスクを使用します。 CURLOPT_HTTPAUTH。 現在、プロキシ認証では CURLAUTH_BASIC と CURLAUTH_NTLM のみがサポートされています。 cURL バージョン 7.10.7 で追加されました。
CURLOPT_PROXYPORT 接続先のプロキシ サーバーのポート番号。 この数値はパラメータを使用して設定することもできます。 CURLOPT_PROXY.
CURLOPT_PROXYTYPE CURLPROXY_HTTP (デフォルト) または CURLPROXY_SOCKS5 のいずれか。 cURL 7.10 で追加されました。
CURLOPT_REDIR_PROTOCOLS 値のビットマスク カールプロト_*。 このビットマスクは、リダイレクト時に libcurl によって使用されるプロトコルを制限します (パラメーターが有効になっている場合) CURLOPT_FOLLOWLOCATION)。 これにより、一部の転送のリダイレクト時に使用されるプロトコルのセットを制限できます。 デフォルトでは、libcurl は FILE と SCP を除くすべてのプロトコルをサポートします。 7.19.4 より前のバージョンでは、リダイレクトは例外なくすべてのプロトコルに使用されていました。 パラメータの説明も参照してください CURLOPT_PROTOCOLSプロトコル値を含む定数のリストについては。 cURL バージョン 7.19.4 で追加されました。
CURLOPT_RESUME_FROM 送信開始オフセット (バイト単位)。
CURLOPT_SSL_VERIFYHOST SSL 証明書に共通名が存在するかどうかを確認するには、1 を使用します。 共通名が存在し、指定されたホストと一致することを確認するには、2 を使用します。 戦闘環境では、このパラメータの値は 2 (デフォルトで設定) である必要があります。 値 1 のサポートは cURL 7.28.1 で削除されました。
CURLOPT_SSLVERSION 定数の 1 つ CURL_SSLVERSION_DEFAULT (0), CURL_SSLVERSION_TLSv1 (1), CURL_SSLVERSION_SSLv2 (2), CURL_SSLVERSION_SSLv3 (3), CURL_SSLVERSION_TLSv1_0 (4), CURL_SSLVERSION_TLSv1_1(5) または CURL_SSLVERSION_TLSv1_2 (6).
CURLOPT_TIMECONDITION パラメータの解釈方法 CURLOPT_TIMEVALUE。 CURL_TIMECOND_IFMODSINCE を使用すると、パラメータで指定された時間以降にページが変更された場合にのみページが返されます。 CURLOPT_TIMEVALUE。 ページが変更されていない場合は、タイトルが返されます。 「304は変更されていません」、パラメータが CURLOPT_HEADERにインストールされています 真実。 逆の効果を得るには、CURL_TIMECOND_IFUNMODSINCE を使用します。 デフォルトは CURL_TIMECOND_IFMODSINCE です。
CURLOPT_TIMEOUT cURL 関数の実行に許可される最大秒数。
CURLOPT_TIMEOUT_MS cURL 関数の実行に許可される最大ミリ秒数。 libcurl が通常のシステム名リゾルバーを使用して構築されている場合、この接続スパンでは引き続き 2 番目の丸めタイムアウトが使用され、最小タイムアウトは 1 秒が許可されます。 cURL バージョン 7.16.2 で追加されました。 PHP 5.2.3 以降で利用可能です。
CURLOPT_TIMEVALUE 1970 年 1 月 1 日からの秒数。 この時間はパラメータによって使用されます CURLOPT_TIMECONDITION。 デフォルトでは、CURL_TIMECOND_IFMODSINCE パラメータが使用されます。
CURLOPT_MAX_RECV_SPEED_LARGE ダウンロード速度が転送全体の平均でこの値 (1 秒あたりのバイト数で指定) を超える場合、ダウンロードは一時停止され、平均速度がこのパラメータ以下に維持されます。 デフォルトでは、速度は制限されません。
CURLOPT_MAX_SEND_SPEED_LARGE サーバーへのアップロードが転送全体を通じて平均してこの値 (1 秒あたりのバイト数で指定) を超える場合、アップロードは一時停止され、このパラメータ以下の平均速度を維持します。 デフォルトでは、速度は制限されません。 cURL バージョン 7.15.5 で追加されました。 PHP 5.4.0 以降で利用可能です。
CURLOPT_SSH_AUTH_TYPES 1 つ以上の定数で構成されるビットマスク: CURLSSH_AUTH_PUBLICKEY, CURLSSH_AUTH_PASSWORD, CURLSSH_AUTH_HOST, CURLSSH_AUTH_KEYBOARD。 インストール CURLSSH_AUTH_ANY libcurl がそれらの 1 つを独立して選択するためです。 cURL 7.16.1 で追加されました。
CURLOPT_IPRESOLVE アプリケーションがホスト名を決定する IP アドレスのタイプを選択できるようにします。 これは、複数のバージョンの IP アドレスから派生したホスト名を使用している場合に必要です。 可能な値は次のとおりです CURL_IPRESOLVE_WHATEVER, CURL_IPRESOLVE_V4, CURL_IPRESOLVE_V6、そしてデフォルトでは CURL_IPRESOLVE_WHATEVER. cURL 7.10.8 で追加されました。

次のオプション パラメーター値の場合、値パラメーターは次のタイプである必要があります。 :

パラメータ 設定値 値 ノート
CURLOPT_CAINFO ノードがチェックされる 1 つ以上の証明書を含むファイルの名前。 このパラメータは、以下と組み合わせて使用​​した場合にのみ意味を持ちます。 CURLOPT_SSL_VERIFYPEER. 絶対パスが必要です。
CURLOPT_CAPATH 複数の CA 証明書を含むディレクトリ。 このオプションを組み合わせて使用​​します CURLOPT_SSL_VERIFYPEER.
CURLOPT_COOKIE ヘッダーの内容 "クッキー:"、HTTPリクエストで使用されます。 複数の Cookie はセミコロンとその後のスペースで区切られることに注意してください (例: " 果物=リンゴ。 色=赤")
CURLOPT_COOKIEFILE Cookie を含むファイルの名前。 このファイルは Netscape 形式であるか、ファイルに書き込まれる単純な HTTP ヘッダーである必要があります。 空の文字列がファイル名として渡された場合、Cookie は保存されませんが、Cookie の処理は引き続き有効になります。
CURLOPT_COOKIEJAR ハンドルが閉じられた後 (たとえば、curl_close を呼び出した後)、現在の転送のすべての内部 Cookie が保存されるファイルの名前。
CURLOPT_CUSTOMREQUEST

代わりに使用されるカスタムリクエストメソッド "得る"または "頭" HTTPリクエストを行うとき。 これはクエリに役立ちます "消去"またはその他の、よりまれな HTTP リクエスト。 正しい意味は次のような言葉になります。 "得る", "役職", "接続する"等々; それらの。 ここに HTTP リクエスト行全体を入力しないでください。 たとえば、 「GET /index.html HTTP/1.0\r\n\r\n」間違いでしょう。

コメント:

サーバーがこのタイプのリクエストをサポートしていることを確認するまで、この機能を使用しないでください。

CURLOPT_EGDSOCKET のように CURLOPT_RANDOM_FILEただし、ファイル名がエントロピー収集デーモンソケットに設定される点が異なります。
CURLOPT_ENCODING ヘッダーの内容 「受け入れエンコーディング:」。 これにより、リクエストをデコードできるようになります。 サポートされているエンコーディングは次のとおりです "身元", 「しぼむ」そして 「gzip」。 空の文字列が渡された場合、 "" 、サポートされているすべてのエンコーディング タイプを含むヘッダーが送信されます。 cURL 7.10 で追加されました。
CURLOPT_FTPPORT FTP の「PORT」コマンドの IP アドレスを決定するために使用される値。 「PORT」コマンドは、接続先の IP アドレスをサーバーに指示します。 これには、IP アドレス、ホスト名、ネットワーク インターフェイス名 (Unix の場合)、またはデフォルトのシステム IP アドレスを使用する場合は単に「-」を指定できます。
CURLOPT_INTERFACE 使用するネットワークインターフェースの名前。 インターフェイス名、IP アドレス、またはホスト名を指定できます。
CURLOPT_KEYPASSWD 秘密キーを使用するにはパスワードが必要です CURLOPT_SSLKEYまたは CURLOPT_SSH_PRIVATE_KEYFILE. cURL 7.16.1 で追加されました。
CURLOPT_KRB4LEVEL セキュリティ レベル KRB4 (Kerberos 4)。 次の値のいずれか (最も弱いものから最も強いものの順) が正しいです。 "クリア", "安全", "機密", "プライベート"。。 指定された文字列が指定された値と異なる場合は、その値が使用されます。 "プライベート"。 このオプションを次のように設定すると、 ヌル KRB4 セキュリティを完全に無効にします。 現時点では、KRB4 セキュリティは FTP トランザクションでのみ機能します。
CURLOPT_POSTFIELDS すべてのデータは HTTP POST リクエストで送信されます。 ファイルを転送する場合は、ファイル名の前に指定します @ 、ファイルへのフルパスも使用します。 ファイルの種類は、「」形式を使用して指定することもできます。 ;type=MIME タイプファイル名の後に「」を付けます。このパラメータは、「」のような URL エンコードされた文字列として渡すことができます。 パラ1=ヴァル1&パラ2=ヴァル2&..."、配列の形式で、キーはフィールドの名前になり、値はその内容になります。値が配列の場合、ヘッダー コンテンツタイプに設定されます マルチパート/フォームデータ. PHP 5.2.0 以降、プレフィックス付きのファイルを転送する場合 @ 、値は配列である必要があります。 PHP 5.5.0 以降、プレフィックス @ は非推奨になり、次を使用してファイルを送信できます。 CURLファイル。 プレフィックス @ を無効にして、で始まる値を許可することができます @ オプションを設定することで CURLOPT_SAFE_UPLOAD意味的には 真実.
CURLOPT_PROXY リクエストがルーティングされる HTTP プロキシ。
CURLOPT_PROXYUSERPWD フォームに記入されたログイン名とパスワード ":" 、プロキシ経由で接続するときに使用されます。
CURLOPT_RANDOM_FILE SSL 用の乱数ジェネレーターを初期化するために使用されるファイルの名前。
CURLOPT_RANGE ダウンロードするデータの範囲、形式 「X-Y」、X または Y のいずれかを省略できます。 HTTP プロトコルは、カンマで区切られた複数の範囲の送信もサポートしています。それらは次の形式で指定されます。 「X-Y、N-M」.
CURLOPT_REFERER ヘッダーの内容 「参照者:」、HTTPリクエストで使用されます。
CURLOPT_SSH_HOST_PUBLIC_KEY_MD5 32 桁の 16 進数を含む文字列。 この文字列はリモート コンピュータの公開キーの MD5 チェックサムである必要があり、libcurl はチェックサムが公開キーと一致するまでリモート ホストへの接続をリセットします。 このオプションは、SCP および SFTP を使用したデータ転送専用です。 cURL 7.17.1 で追加されました。
CURLOPT_SSH_PUBLIC_KEYFILE 公開キーのファイル名。 指定しない場合、libcurl は、HOME 環境変数が設定されている場合はファイル $HOME/.ssh/id_dsa.pub をデフォルトとして使用し、HOME 環境変数が設定されていない場合は現在のディレクトリ内のファイル "id_dsa.pub" を使用します。 cURL 7.16.1 で追加されました。
CURLOPT_SSH_PRIVATE_KEYFILE 秘密キーのファイル名。 指定しない場合、libcurl は、HOME 環境変数が設定されている場合は $HOME/.ssh/id_dsa ファイルをデフォルトとして使用し、HOME 環境変数が設定されていない場合は現在のディレクトリ内の "id_dsa" ファイルを使用します。 ファイルがパスワードで保護されている場合は、次を使用してパスワードを設定します。 CURLOPT_KEYPASSWD. cURL 7.16.1 で追加されました。
CURLOPT_SSL_CIPHER_LIST SSL 転送で使用される暗号のリスト。 例えば、 RC4-SHAそして TLSv1は有効な暗号リストです。
CURLOPT_SSLCERT 正しくフォーマットされた PEM 証明書を含むファイルの名前。
CURLOPT_SSLCERTPASSWD 証明書を使用するにはパスワードが必要です CURLOPT_SSLCERT.
CURLOPT_SSLCERTTYPE 証明書の形式。 サポートされている形式 「ペム」(デフォルト)、 「ダー」そして 「英語」. cURL 7.9.3 で追加されました。
CURLOPT_SSLENGINE パラメータで指定されたSSL秘密キーの暗号化エンジンID CURLOPT_SSLKEY.
CURLOPT_SSLENGINE_DEFAULT 非対称暗号化操作に使用される暗号化メカニズムの識別子。
CURLOPT_SSLKEY SSL秘密キーファイルの名前。
CURLOPT_SSLKEYPASSWD

パラメータで指定されたSSL秘密キーを使用するために必要なシークレットパスワード CURLOPT_SSLKEY.

コメント:

このパラメータには貴重なパスワードが含まれているため、この PHP スクリプトを安全な場所に保管してください。

CURLOPT_SSLKEYTYPE パラメータで指定されたSSL秘密キーのタイプ CURLOPT_SSLKEY。 次のキーの種類がサポートされています。 「ペム」(デフォルト)、 「ダー」そして 「英語」.
CURLOPT_URL ダウンロード可能なURL。 このパラメータは、次を使用してセッションを初期化するときにも設定できます。 curl_init().
CURLOPT_USERAGENT ヘッダーの内容 "ユーザーエージェント: "、HTTPリクエストで送信されます。
CURLOPT_USERPWD 接続中に使用されるログイン名とパスワード。形式で指定します。 ":" .

次のオプション パラメーター値の場合、値パラメーターは配列である必要があります。

パラメータ 設定値 値 ノート
CURLOPT_HTTP200ALIASES 誤った応答ではなく正しい応答として扱われる HTTP 200 応答の配列。 cURL バージョン 7.10.3 で追加されました。
CURLOPT_HTTPHEADER array("Content-type: text/plain", "Content-length: 100") 形式の、設定された HTTP ヘッダーの配列。
CURLOPT_POSTQUOTE FTP リクエストの完了後にサーバー上で実行される FTP コマンドの配列。
CURLOPT_QUOTE FTP リクエストが行われる前にサーバー上で実行される FTP コマンドの配列。

次のオプション パラメーター値の場合、値パラメーターはストリーム ハンドル (たとえば、関数によって返される) である必要があります。 fopen()):

パラメータ 設定値 値
CURLOPT_FILE 転送結果が書き込まれるファイル。 デフォルトの出力ストリーム 標準出力(ブラウザウィンドウ)。
CURLOPT_INFILE サーバーにアップロードするときにデータを読み取るファイル。
CURLOPT_STDERR エラー ストリームの代わりに使用される代替エラー出力ファイル 標準エラー.
CURLOPT_WRITEHEADER 現在の操作のヘッダーが書き込まれるファイル。

次のオプション パラメーター値の場合、値パラメーターは有効な関数名またはクロージャーである必要があります。

パラメータ 設定値 値
CURLOPT_HEADERFUNCTION コールバック関数は 2 つのパラメータを取ります。 最初のパラメータは cURL ハンドルで、2 番目のパラメータは書き込まれるヘッダーを含む文字列です。 ヘッダーはこのコールバック関数を使用して書き込む必要があります。 書き込まれたバイト数を返す必要があります。
CURLOPT_PASSWDFUNCTION コールバック関数は 3 つのパラメータを取ります。 最初のパラメータは cURL ハンドル、2 番目のパラメータはパスワード プロンプト文字列、3 番目のパラメータはパスワードの最大長です。 パスワードを含む文字列を返す必要があります。
CURLOPT_PROGRESSFUNCTION

コールバック関数は 5 つのパラメータを取ります。 1 番目は cURL 記述子、2 番目はサーバーからダウンロードされると予想される合計バイト数、3 番目は既にダウンロードされたバイト数、4 番目はサーバーに送信されると予想される合計バイト数、 5 番目は、すでに送信されたバイト数です。

コメント:

コールバック関数は、オプションが指定された場合にのみ呼び出されます。 CURLOPT_NOPROGRESS値に設定 間違い.

ゼロ以外の値を返すと、転送をキャンセルできます。 この場合はエラーが表示されます CURLE_ABORTED_BY_CALLBACK.

CURLOPT_READFUNCTION コールバック関数は 3 つのパラメータを取ります。 最初のパラメータは cURL ハンドルで、2 番目のパラメータはオプションを介して cURL に渡されるストリーム リソースです。 CURLOPT_INFILE、3 番目のパラメータは、読み取られるデータの最大許容量です。 コールバック関数は、通常は渡されたストリーム リソースから読み取ることによって、要求されたデータ量以下の長さの文字列を返す必要があります。 ファイルの終わりを知らせるために空の文字列を返す必要があります 終了後.
CURLOPT_WRITEFUNCTION コールバック関数は 2 つのパラメータを取ります。 最初のパラメータは cURL ハンドルで、2 番目のパラメータは書き込まれるデータを含む文字列です。 この機能を使用してデータを保存する必要があります。 書き込まれた正確なバイト数を返す必要があります。返さない場合、ダウンロードはエラーで中止されます。

他の意味:

戻り値

戻り値 真実正常に完了した場合、または 間違いエラーが発生した場合。

変更点一覧

バージョン 説明
5.6.0 オプション CURL_SAFE_UPLOAD現在のデフォルト値は次のとおりです 真実.
5.6.0 削除されたオプション CURLOPT_CLOSEPOLICYおよびそれに関連する意味。
5.5.0 cURL リソースはコールバック関数の最初の引数として追加されます。 CURLOPT_PROGRESSFUNCTION.
5.5.0 追加されたオプション CURLOPT_SHARE.
5.3.0 追加されたオプション CURLOPT_PROGRESSFUNCTION.
5.2.10 追加されたオプション CURLOPT_PROTOCOLSそして CURLOPT_REDIR_PROTOCOLS.
5.1.0 追加されたオプション CURLOPT_AUTOREFERER, CURLOPT_BINARYTRANSFER, CURLOPT_FTPSSLAUTH, CURLOPT_PROXYAUTHそして CURLOPT_TIMECONDITION.
5.0.0 追加されたオプション CURLOPT_FTP_USE_EPRT, CURLOPT_NOSIGNAL, CURLOPT_UNRESTRICTED_AUTH, CURLOPT_BUFFERSIZE, CURLOPT_HTTPAUTH, CURLOPT_PROXYPORT, CURLOPT_PROXYTYPE, CURLOPT_SSLCERTTYPEそして CURLOPT_HTTP200ALIASES.

例1 CURL セッションの初期化と Web ページのロード

// 新しい cURL リソースを作成します
$ch =curl_init();

/* http://localhost/upload.php:
print_r($_POST);
print_r($_FILES);
*/

$ch =curl_init();

$data = array("name" => "Foo" , "file" => "@/home/user/test.png" );

Curl_setopt($ch, CURLOPT_URL, "http://localhost/upload.php");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt ($ch、CURLOPT_POSTFIELDS、$data);

Curl_exec($ch);
?>

この例を実行した結果は次のようになります。

配列 ( => Foo) 配列 ( => 配列 ( => test.png => image/png => /tmp/phpcpjNeQ => 0 => 279))

ノート

コメント:

配列を渡す CURLOPT_POSTFIELDSデータを次のようにエンコードします マルチパート/フォームデータ一方、URL エンコードされた文字列を渡すと、データは次のようにエンコードされます。 application/x-www-form-urlencoded.

c URL は、サーバーとの間でデータを転送するための非常に便利なコマンド ライン ツールです。 Curl は、FILE、HTTP、HTTPS、IMAP、IMAPS、LDAP、DICT、LDAPS、TELNET、FTPS、GOPHER、RTMP、RTSP、SCP、SFTP、POP3、POP3S、SMB、SMBS、SMTP、SMTPS、TFTP などのさまざまなプロトコルをサポートします。 。

cURL は、さまざまな興味深い方法で使用できます。 このツールを使用すると、ファイルのダウンロード、アップロード、管理、電子メール アドレスの確認、さらにはソーシャル メディア Web サイトでのステータスの更新や屋外の天気の確認もできます。 この記事では、あらゆる での cURL ツールの最も便利で基本的な 5 つの使用法を見ていきます。

1. URLを確認する

cURL の最も一般的かつ簡単な使用法の 1 つは、コマンド自体を出力し、その後にテストする URL を出力することです。

カール https://domain.ru

このコマンドは、端末に URL の内容を表示します。

2. 出力された URL をファイルに保存します

Curl -o ウェブサイト https://domain.ru % 合計 % 受信 % Xferd 平均速度 時間 時間 時間 現在の Dload アップロード 合計消費左速度 100 41793 0 41793 0 0 275k 0 --:--:-- - -:-- :-- --:--:-- 2.9M

この例では、出力は現在の作業ディレクトリ内の「website」という名前のファイルに保存されます。

3. Curl を使用したファイルのアップロード

コマンドに -o オプションを追加すると、Curl を使用してファイルをダウンロードできます。 リモートサーバーと同じ名前でファイルをローカルサーバーに保存するために使用されます。

カール -O https://domain.ru/file.zip

この例では、アーカイブ「file.zip」が現在の作業ディレクトリにダウンロードされます。

cURL に -o オプションを追加することで、別の名前のファイルをアップロードすることもできます。

Curl -o archive.zip https://domain.ru/file.zip

したがって、アーカイブ「file.zip」はダウンロードされ、「Archive.zip」として保存されます。

以下の例に示すように、cURL を使用して複数のファイルを一度にダウンロードすることもできます。

カール -O https://domain.ru/file.zip -O https://domain.com/file2.zip

Curl は、次のコマンドを使用して SSH 経由でファイルを安全にアップロードするためにも使用できます。

Curl -u ユーザー sftp://server.domain.ru/path/to/file

ダウンロードするファイルへのフルパスを使用する必要があることに注意してください

4. Web サイトの HTTP ヘッダーから情報を取得する

cURL に -I ('i') オプションを追加すると、任意の Web サイトから HTTP ヘッダー情報を簡単に取得できます。

Curl -I http://domain.ru HTTP/1.1 200 OK 日付: Sun, 16 Oct 2016 23:37:15 GMT サーバー: Apache/2.4.23 (Unix) X-Powered-By: PHP/5.6.24 接続: 閉じる Content-Type: text/html; 文字セット=UTF-8

5. FTPサーバーへのアクセス

Curl を使用して FTP サーバーにアクセスするには、次のコマンドを使用する必要があります。

Curl ftp://ftp.domain.ru --user ユーザー名:パスワード

Curl は FTP サーバーに接続し、ユーザーのホーム ディレクトリ内のすべてのファイルとディレクトリを一覧表示します。

FTPを使用してファイルをダウンロードできます

Curl ftp://ftp.domain.ru/file.zip --user ユーザー名:パスワード

ファイルをFTPサーバーにアップロードします

Curl -T file.zip ftp://ftp.domain.ru/ --user ユーザー名:パスワード

Curl ページを手動でチェックして、利用可能なすべての cURL オプションとその機能を確認できます。

マンカール

PS.この投稿が気に入った場合は、下のボタンを使用してソーシャル ネットワークでお友達と共有するか、コメントを残してください。 ありがとう。

PHP プログラミング言語について少しお話し、特に拡張機能について触れたいと思います。 カール、つまり PHP スクリプト自体から異なるプロトコルを使用して異なるサーバーと対話する機能。

curl について説明する前に、PHP 言語についてはすでに触れていることを思い出していただきたいと思います。たとえば、PHP での Excel へのアップロードや PHP での認証機能についての資料で、次に、次の機能について説明します。 PHPにリクエストを送信します。

カールとは何ですか?

カールは、PHP スクリプトから HTTP などのリクエストを送信するために使用できる PHP 関数のライブラリです。 CURL は、HTTP、HTTPS、FTP などのプロトコルをサポートします。 GET、POST、および PUT メソッドを使用して HTTP リクエストを送信できます。

CURL は、リモート スクリプトを呼び出して結果を取得する必要がある場合、または呼び出されたページの HTML コードを単に保存する必要がある場合に役立ちます。一般に、誰もが独自の用途を見つけることができますが、重要なのは、スクリプトが実行中です。

PHP での CURL ライブラリの接続

CURL ライブラリを使用するには、それに応じて接続する必要があります。

注記! 例として、Windows 7 では PHP 5.4.39 を使用し、Web サーバーとして Apache 2.2.22 を使用します。

最初に行う必要があるのは、ライブラリをコピーすることです ssleay32.dll、libeay32.dll、libssh2.dllこれらは、PHP のあるディレクトリ、Windows システム ディレクトリ、つまり次の場所にあります。 C:\Windows\システム32.

次に、php_curl.dll ライブラリを php.ini に接続します。 次の行のコメントを解除する

ライブラリが接続されていません

;extension=php_curl.dll

接続されたライブラリ

拡張子=php_curl.dll

以上です。Apache を再起動し、phpinfo() 関数を呼び出します。接続が成功すると、curl セクションが表示されます。


存在しない場合、意味することは 1 つだけです。ライブラリがロードされなかったということです。最も一般的な理由は、上記の DLL が Windows システム ディレクトリにコピーされていないことです。

CURL の例 - リモート ページを画面に表示するように要求する

この例では、GET メソッドを使用して HTTP 経由でリモート ページを要求し、そのコンテンツを画面に表示します。

test ディレクトリには、test_curl.php と test.php という 2 つの PHP ファイルがあります。test_curl.php は、curl を使用するスクリプトであり、test.php は、呼び出すリモート スクリプトです。 コードを詳しくコメントしました。

コードtest_curl.php

コードtest.php

見出し1"; ブレーク; ケース 2: エコー "<Н2>見出し2"; ブレーク; ケース 3: エコー "<Н3>見出し 3"; ブレーク; ) ) ?>

その結果、test_curl.php を実行すると、画面に「見出し 1」というメッセージが表示され、id パラメータを渡してみることができます ( この場合は 2 または 3).

CURL の例 - リモート スクリプトの呼び出しと結果の取得

次に、後で処理するために、スクリプトを呼び出して結果を取得してみましょう。たとえば、POST メソッドを使用してみましょう。 ファイル名はそのままにしておきます。

コードtest_curl.php

コードtest.php

そして、test_curl.php を実行すると、画面に 111 が表示されます。 リモート スクリプトにアクセスした結果として得られる 1.11 に 100 を乗算します。

次に、関数とその定数について説明します。

一般的に使用される CURL 関数と定数

  • curl_init - セッションを初期化します。
  • curl_close - セッションを閉じます。
  • curl_exec - リクエストを実行します。
  • curl_errno - エラー コードを返します。
  • curl_setopt - セッションのパラメータを設定します。例:
    • CURLOPT_HEADER – 値 1 はヘッダーが返されることを意味します。
    • CURLOPT_INFILESIZE - 予想されるファイル サイズを指定するパラメーター。
    • CURLOPT_VERBOSE - 値 1 は、CURL が実行されたすべての操作に関する詳細メッセージを表示することを意味します。
    • CURLOPT_NOPROGRESS – 操作の進行状況インジケーター、値 1 を無効にします。
    • CURLOPT_NOBODY – ドキュメントは必要なく、ヘッダーのみが必要な場合は、値を 1 に設定します。
    • CURLOPT_UPLOAD - ファイルをサーバーにアップロードします。
    • CURLOPT_POST – POST メソッドを使用してリクエストを実行します。
    • CURLOPT_FTPLISTONLY — FTP サーバー ディレクトリ内のファイルのリストを取得します。値 1。
    • CURLOPT_PUT — PUT メソッド、値 1 を使用してリクエストを実行します。
    • CURLOPT_RETURTRANSFER - 結果をブラウザに出力せずに返します (値 1)。
    • CURLOPT_TIMEOUT – 最大実行時間 (秒)。
    • CURLOPT_URL – 連絡先のアドレスを指定します。
    • CURLOPT_USERPWD - :; 形式のユーザー名とパスワードを含む文字列。
    • CURLOPT_POSTFIELDS – POST リクエストのデータ。
    • CURLOPT_REFERER - HTTP ヘッダー「Referer:」の値を設定します。
    • CURLOPT_USERAGENT - HTTP ヘッダー「User-Agent:」の値を設定します。
    • CURLOPT_COOKIE — HTTP リクエストとともに送信される「Cookie:」ヘッダーの内容。
    • CURLOPT_SSLCERT - PEM 形式の証明書を含むファイルの名前。
    • CURLOPT_SSL_VERIFYPEER – 値 0。リモート サーバー証明書の検証を無効にします (デフォルトは 1)。
    • CURLOPT_SSLCERTPASSWD — 証明書ファイルのパスワード。
  • curl_getinfo - 操作に関する情報を返します。2 番目のパラメーターは、表示する必要があるものを正確に示す定数にすることができます。次に例を示します。
    • CURLINFO_EFFECTIVE_URL - 最後に使用した URL。
    • CURLINFO_HTTP_CODE - 最後に受信した HTTP コード。
    • CURLINFO_FILETIME — ロードされたドキュメントの変更日。
    • CURLINFO_TOTAL_TIME — 操作の実行時間 (秒)。
    • CURLINFO_NAMELOOKUP_TIME — サーバー名解決時間 (秒)。
    • CURLINFO_CONNECT_TIME — 接続の確立に費やした時間 (秒単位)。
    • CURLINFO_PRETRANSFER_TIME — 操作の開始から実際のデータ転送の準備ができるまでの経過時間 (秒単位)。
    • CURLINFO_STARTTRANSFER_TIME — 操作の開始からデータの最初のバイトが転送されるまでの経過時間 (秒単位)。
    • CURLINFO_REDIRECT_TIME — リダイレクトに費やした時間 (秒単位)。
    • CURLINFO_SIZE_UPLOAD - アップロード時のバイト数。
    • CURLINFO_SIZE_DOWNLOAD - ダウンロード時のバイト数。
    • CURLINFO_SPEED_DOWNLOAD - 平均ダウンロード速度。
    • CURLINFO_SPEED_UPLOAD - 平均ダウンロード速度。
    • CURLINFO_HEADER_SIZE - 受信したすべてのヘッダーの合計サイズ。
    • CURLINFO_REQUEST_SIZE - 送信されたすべてのリクエストの合計サイズ。
    • CURLINFO_SSL_VERIFYRESULT - CURLOPT_SSL_VERIFYPEER パラメータの設定によって要求された SSL 証明書を確認した結果。
    • CURLINFO_CONTENT_LENGTH_DOWNLOAD - ダウンロードされたドキュメントのサイズ。Content-Length ヘッダーから読み取られます。
    • CURLINFO_CONTENT_LENGTH_UPLOAD - アップロードされたデータのサイズ。
    • CURLINFO_CONTENT_TYPE - 受信した Content-type ヘッダーの内容。このヘッダーが受信されなかった場合は NULL。

CURL 関数とその定数について詳しくは、PHP の公式 Web サイトをご覧ください。