ホームページ >バックエンド開発 >PHPチュートリアル >PHPマスター|リモートリクエストにCurlを使用します

PHPマスター|リモートリクエストにCurlを使用します

William Shakespeare
William Shakespeareオリジナル
2025-02-23 10:14:18502ブラウズ

PHP Master | Using cURL for Remote Requests

PHPマスター|リモートリクエストにCurlを使用します

Linuxユーザーの場合は、おそらくCurlを使用しています。これは、電子メールの送信から最新のMy Little Pony字幕までのすべてに使用される強力なツールです。この記事では、PHPでCurl拡張機能を使用する方法について説明します。この拡張機能は、PHPの快適な世界でのコンソールユーティリティとして機能を提供します。 Get Requestsの送信と投稿の送信、ログインCookieの処理、FTP機能について説明します。 開始する前に、拡張機能(およびlibcurlライブラリ)がインストールされていることを確認してください。デフォルトではインストールされていません。ほとんどの場合、システムのパッケージマネージャーを使用してインストールできますが、PHPマニュアルで手順を見つけることができます。

キーテイクアウト

  • Curlは、電子メールの送信から字幕のダウンロードまでのさまざまなタスクに使用される強力なツールであり、コンソールユーティリティと同じ機能を提供する拡張機能を介してPHPで使用できます。
  • Curlを使用して、Webページを取得し、Webサイトにログインし、FTPを使用して複数のリクエストを送信できます。たとえば、具体的な詳細を記載したPOSTリクエストを送信することにより、WordPress搭載のWebサイトへのログインをシミュレートできます。
  • トラブルシューティングCurl要求は、2つの機能を使用して簡素化されます:curl_getinfo()とcurl_error()。これらの関数は、チャネルに関する詳細情報と、リクエスト中に発生する可能性のあるエラーに関する情報を提供します。
  • Curlは、リモートコールを作成するための効率的で強力なツールであり、外部APIへのアクセスやクロールなどのタスクに最適です。ユーザーフレンドリーなインターフェイスとリクエストの比較的簡単な実行を提供します。
  • どのように機能しますか?
  • すべてのカール要求は、同じ基本パターンに従います。
最初に、curl_init()関数を呼び出すことにより、curlリソース(「curlハンドル」の

ch

として略されることがよくあります)を初期化します。
    次に、URL、リクエストメソッド、ペイロードデータなど、さまざまなオプションを設定します。オプションはcurl_setopt()で個別に設定するか、curl_setopt_array()。
  1. 次に、curl_exec()。を呼び出してリクエストを実行します 最後に、メモリをクリアするためにリソースを解放します。
  2. したがって、リクエストを作成するためのボイラープレートコードは次のようになります。
  3. リクエストのために変更される唯一のものは、オプションが設定されるものです。これはもちろん、Curlで何をしているかに依存します。
  4. Webページを取得
  5. 私が考えることができるCurlを使用する最も基本的な例は、単にWebページの内容を取得することです。それでは、例としてBBCのホームページを取得しましょう。
  6. ブラウザの出力を確認すると、BBC Webサイトが表示されていることがわかります。スタイルシートや画像に絶対的にリンクしているため、サイトが正しく表示されるため、幸運です。 使用したオプションは次のとおりです。
curlopt_url - リクエストのURLを指定します
<span><span><?php
</span></span><span><span>// init the resource
</span></span><span><span>$ch = curl_init();
</span></span><span>
</span><span><span>// set a single option...
</span></span><span><span>curl_setopt($ch, OPTION, $value);
</span></span><span><span>// ... or an array of options
</span></span><span><span>curl_setopt_array($ch, array(
</span></span><span><span>OPTION1 => $value1,
</span></span><span><span>OPTION2 => $value2
</span></span><span><span>));
</span></span><span>
</span><span><span>// execute
</span></span><span><span>$output = curl_exec($ch);
</span></span><span>
</span><span><span>// free
</span></span><span><span>curl_close($ch);</span></span>
  • curlopt_returntransfer - falseを設定すると、curl_exec()はリクエストの成功に応じてtrueまたはfalseを返します。 trueに設定すると、curl_exec()は応答の内容を返します。
  • Webサイトにログイン

    CurlはBBCページを取得するためのGETリクエストを実行しましたが、CurlはPostやPutなどの他の方法も使用できます。この例では、WordPressを搭載したWebサイトにログインすることをシミュレートします。ログインは、次の詳細とともに、

    http://example.com/wp-login.phpにpostリクエストを送信することによって行われます。
      ログイン - ユーザー名
    • pwd - パスワード
    • redirect_to - ログインした後に行きたいURL
    • testcookie - 1に設定する必要があります(これは単なるWordPress専用です)
    • もちろん、これらのパラメーターは各サイトに固有です。ブラウザ内のHTMLページのソースを表示することで簡単に実行できることは、常に自分の入力名を確認する必要があります。
    新しいオプションは次のとおりです。
    <span><span><?php
    </span></span><span><span>// init the resource
    </span></span><span><span>$ch = curl_init();
    </span></span><span>
    </span><span><span>// set a single option...
    </span></span><span><span>curl_setopt($ch, OPTION, $value);
    </span></span><span><span>// ... or an array of options
    </span></span><span><span>curl_setopt_array($ch, array(
    </span></span><span><span>OPTION1 => $value1,
    </span></span><span><span>OPTION2 => $value2
    </span></span><span><span>));
    </span></span><span>
    </span><span><span>// execute
    </span></span><span><span>$output = curl_exec($ch);
    </span></span><span>
    </span><span><span>// free
    </span></span><span><span>curl_close($ch);</span></span>
      curlopt_post - POSTリクエストを送信する場合は、これを真実に設定します
    • curlopt_postfields - リクエストの本文で送信されるデータ
    • curlopt_followlocation - trueを設定すると、curlはリダイレクト
    • に従います
    • ええと!ただし、上記をテストすると、エラーメッセージが表示されます。「エラー:Cookieはブロックされているか、ブラウザによってサポートされていません。 CookieがWordPressを使用できるようにする必要があります。」これは正常です。なぜなら、セッションが機能するためにCookieを有効にする必要があるためです。これは、さらに2つのオプションを追加することで行います。
    新しいオプションは次のとおりです。
    <span><span><?php
    </span></span><span><span>curl_setopt_array(
    </span></span><span><span>$ch, array(
    </span></span><span><span>CURLOPT_URL => 'http://www.bbc.co.uk/',
    </span></span><span><span>CURLOPT_RETURNTRANSFER => true
    </span></span><span><span>));
    </span></span><span>
    </span><span><span>$output = curl_exec($ch);
    </span></span><span><span>echo $output;</span></span>
      curlopt_cookiesession - Trueに設定した場合、Curlは新しいCookieセッションを開始し、以前のCookieを無視します
    • curlopt_cookiejar - これは、CurlがCookie情報を保存するファイルの名前です。ファイルに書き込む正しい権限があることを確認してください!
    • ログインしたので、後続のリクエストのためにCookieファイルを参照する必要があります。
    ftp

    の作業 Curlを使用してFTP経由でファイルをダウンロードしてアップロードするのも簡単です。ファイルのダウンロードを見てみましょう:

    セキュリティ上の理由で匿名のアップロードとダウンロードを許可する公開FTPサーバーはあまりないため、上記のURLと資格情報はただの場所にいるだけです。 これは、HTTPリクエストの送信とほとんど同じですが、わずかな違いは次のとおりです。
    <span><span><?php
    </span></span><span><span>$postData = array(
    </span></span><span><span>'login' => 'acogneau',
    </span></span><span><span>'pwd' => 'secretpassword',
    </span></span><span><span>'redirect_to' => 'http://example.com',
    </span></span><span><span>'testcookie' => '1'
    </span></span><span><span>);
    </span></span><span>
    </span><span><span>curl_setopt_array($ch, array(
    </span></span><span><span>CURLOPT_URL => 'http://example.com/wp-login.php',
    </span></span><span><span>CURLOPT_RETURNTRANSFER => true,
    </span></span><span><span>CURLOPT_POST => true,
    </span></span><span><span>CURLOPT_POSTFIELDS => $postData,
    </span></span><span><span>CURLOPT_FOLLOWLOCATION => true
    </span></span><span><span>));
    </span></span><span>
    </span><span><span>$output = curl_exec($ch);
    </span></span><span><span>echo $output;</span></span>
      curlopt_url - ファイルのURLは、「http://」の代わりに「ftp://」の使用に注意してください
    • curlot_userpwd - FTPサーバーのログイン資格情報
    • FTP経由でファイルをアップロードすることはやや複雑ですが、それでも管理可能です。このように見えます:
    ここで重要なオプションは次のとおりです。
    <span><span><?php
    </span></span><span><span>curl_setopt_array($ch, array(
    </span></span><span><span>CURLOPT_URL => 'http://example.com/wp-login.php',
    </span></span><span><span>CURLOPT_RETURNTRANSFER => true,
    </span></span><span><span>CURLOPT_POST => true,
    </span></span><span><span>CURLOPT_POSTFIELDS => $postData,
    </span></span><span><span>CURLOPT_FOLLOWLOCATION => true,
    </span></span><span><span>CURLOPT_COOKIESESSION => true,
    </span></span><span><span>CUROPT_COOKIEJAR => 'cookie.txt'
    </span></span><span><span>));</span></span>
      curlopt_upload - 明らかなブール
    • curlopt_infile - アップロードするファイルの読み取り可能なストリーム
    • curlopt_infilesize - バイトにアップロードするファイルのサイズ

    複数のリクエストの送信

    必要なデータをすべて取得するために5つのリクエストを実行する必要があると想像してください。ネットワークレイテンシやターゲットサーバーの応答速度など、いくつかのことは当社の制御を超えていることに注意してください。 5つの連続した電話を発行する際の遅延が本当に加算できることは明らかです!この問題を軽減する1つの方法は、リクエストを非同期に発行することです。 非同期技術はJavaScriptおよびnode.jsコミュニティでより一般的ですが、時間のかかるタスクが完了するのを待つ代わりに、タスクを別のスレッドまたはプロセスに割り当て、その間に他のことを続けます。タスクが完了すると、結果のために戻ってきます。重要なことは、結果を待つ時間を無駄にしていないことです。他のコードを独立して実行するのに費やしました。 複数の非同期カール要求を実行するためのアプローチは、以前とは少し異なります。同じことを開始します - 各チャネルを開始してからオプションを設定しますが、curl_multi_init()を使用してマルチハンドラーを開始し、curl_multi_add_handle()でチャネルを追加します。ハンドラーをループしてステータスを確認して、ハンドラーを実行します。最終的に、curl_multi_getContent()を使用した応答のコンテンツを取得します。
    <span><span><?php
    </span></span><span><span>// init the resource
    </span></span><span><span>$ch = curl_init();
    </span></span><span>
    </span><span><span>// set a single option...
    </span></span><span><span>curl_setopt($ch, OPTION, $value);
    </span></span><span><span>// ... or an array of options
    </span></span><span><span>curl_setopt_array($ch, array(
    </span></span><span><span>OPTION1 => $value1,
    </span></span><span><span>OPTION2 => $value2
    </span></span><span><span>));
    </span></span><span>
    </span><span><span>// execute
    </span></span><span><span>$output = curl_exec($ch);
    </span></span><span>
    </span><span><span>// free
    </span></span><span><span>curl_close($ch);</span></span>
    上記のコードは、ラップトップで実行するのに約1,100ミリ秒かかりました。マルチインターフェイスなしで順番にリクエストを実行すると、約2,000ミリ秒かかりました。何百ものリクエストを送信している場合、あなたの利益がどうなるか想像してみてください! マルチインターフェイスを抽象化してラップする複数のプロジェクトが存在します。それらについて議論することは記事の範囲を超えていますが、複数のリクエストを非同期に発行することを計画している場合は、それらを見ることをお勧めします。
    • github.com/petewarden/parallelcurl
    • semlabs.co.uk/journal/object-Oriented-curl-crass-with-multi-threading

    トラブルシューティング

    Curlを使用している場合は、おそらくサードパーティサーバーにリクエストを実行しています。それらを制御することはできず、多くの間違いがあります:サーバーはオフラインになり、ディレクトリ構造が変更される可能性があります。 curl_getinfo()およびcurl_error() 。 curl_getInfo()チャンネルに関するすべての情報を含む配列を返します。
    <span><span><?php
    </span></span><span><span>// init the resource
    </span></span><span><span>$ch = curl_init();
    </span></span><span>
    </span><span><span>// set a single option...
    </span></span><span><span>curl_setopt($ch, OPTION, $value);
    </span></span><span><span>// ... or an array of options
    </span></span><span><span>curl_setopt_array($ch, array(
    </span></span><span><span>OPTION1 => $value1,
    </span></span><span><span>OPTION2 => $value2
    </span></span><span><span>));
    </span></span><span>
    </span><span><span>// execute
    </span></span><span><span>$output = curl_exec($ch);
    </span></span><span>
    </span><span><span>// free
    </span></span><span><span>curl_close($ch);</span></span>
    エラーが表示された場合は、curl_error()で確認できます。
    <span><span><?php
    </span></span><span><span>curl_setopt_array(
    </span></span><span><span>$ch, array(
    </span></span><span><span>CURLOPT_URL => 'http://www.bbc.co.uk/',
    </span></span><span><span>CURLOPT_RETURNTRANSFER => true
    </span></span><span><span>));
    </span></span><span>
    </span><span><span>$output = curl_exec($ch);
    </span></span><span><span>echo $output;</span></span>

    結論

    Curlは、リモートコールを行うための強力で効率的な方法を提供しているため、クローラーや外部APIにアクセスするために何かを必要としている場合、Curlは仕事に最適なツールです。それは私たちに素晴らしいインターフェースと、リクエストを実行する比較的簡単な方法を提供します。詳細については、PHPマニュアルとCurl Webサイトをご覧ください。次回はまた会いましょう! この記事へのコメントは閉じられています。 PHPについて質問がありますか?フォーラムで聞いてみませんか? Fotoliaを介した画像 リモートリクエストにCurlを使用することに関するよくある質問(FAQ) curlとは何ですか?なぜPHPで使用されているのか curl、またはクライアントURLは、PHPでHTTPリクエストを行うことができるライブラリです。さまざまな種類のサーバーと通信し、データをダウンロードまたはアップロードするために使用されます。 Curlは、HTTP、HTTP、FTPなどのさまざまなプロトコルをサポートしています。これは、APIとの対話、Webページ、またはファイルのダウンロードにも使用できる強力なツールです。 Webサーバー。ただし、有効になっていない場合は、php.iniファイルを変更することでそうすることができます。 「; extension = curl」と書かれた線を見つけ、セミコロンを削除します。行が存在しない場合は、ファイルの最後に追加できます。変更を加えた後、ファイルを保存してWebサーバーを再起動します。

    phpで簡単なカールリクエストを作成するにはどうすればよいですか?

    簡単なカール要求を行うには、最初にCurlを初期化する必要があります。 curl_init()関数。次に、curl_setopt()関数を使用してオプションを設定します。最後に、curl_exec()でリクエストを実行し、curl_close()でセッションを閉じます。基本的な例は次のとおりです。

    $ ch = curl_init();

    curl_setopt($ ch、curlopt_url、 "http://example.com");

    curl_setopt($ ch、curlopt_returntransfer、1 1 );

    $ output = curl_exec($ ch);

    curl_close($ ch);

    curlのエラーを処理するにはどうすればよいですか?


    curl_errno()とcurl_error( )関数。これらの関数は、それぞれ最後のエラー番号とエラーメッセージを返します。例は次のとおりです。IF(curl_Errno($ ch)){
    echo 'error:'。 curl_error($ ch);
    }
    curlを使用してPOSTリクエストを送信するには、

    POSTリクエストを送信するには、CURLOPT_POSTオプションをTRUEに設定し、CURLOPT_POSTFIELDSオプションを送信したいデータの配列に設定する必要があります。例は次のとおりです。


    curl_setopt($ ch、curlopt_post、1);
    curl_setopt($ ch、curlopt_postfields、 "postvar1 = value1&postvar2 = value2");カールリクエストのヘッダー?

    を使用してカスタムヘッダーを設定できますcurlopt_httpheaderオプション。このオプションは、ヘッダーの配列をその価値として取得します。例は次のとおりです。

    $ headers = array(

    'content-type:application/json'、
    'authorization:bearer'。 ch、curlopt_httpheader、$ headers);

    curl?

    でリダイレクトを追跡するにはどうすればよいですかRedirectsに従ってください。Curlopt_FollowLocationオプションをTrueに設定する必要があります。これができる方法は次のとおりです。応答ヘッダー、Curlopt_headerオプションをTRUEに設定できます。これには、出力のヘッダーが含まれます。例を次に示します。 curlopt_postfieldsオプションオプションと @シンボルでファイルパスをプレフィックスします。例は次のとおりです。

    curl_setopt($ ch、curlopt_postfields、array( 'file' => '@/path/to/file.txt'));

    プロキシ?


    プロキシでCurlを使用するには、curlopt_proxyオプションをプロキシのアドレスに設定できます。これができる方法は次のとおりです

    以上がPHPマスター|リモートリクエストにCurlを使用しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

    声明:
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。