ホームページ  >  記事  >  バックエンド開発  >  PHPのcURLライブラリ

PHPのcURLライブラリ

不言
不言オリジナル
2018-04-09 15:51:371830ブラウズ

この記事では、PHP の cURL ライブラリを紹介します。必要な友人が参照できるようにします。

概要

はじめに

設計の最初は、cURL (クライアント URL ライブラリ) です。 URL 構文を使用してデータを転送するためのコマンド ライン ツール。 cURL ライブラリを使用すると、HTTP リクエスト データの取得など、PHP スクリプトで特定のプロトコルを自由に使用してデータを取得または送信できます。簡単に言えば、cURL はクライアントがサーバーにリソースを要求するためのツールです。

PHP は、Daniel Stenberg によって作成された libcurl ライブラリをサポートしており、さまざまなサーバーに接続し、さまざまなプロトコルを使用できます。 libcurl で現在サポートされているプロトコルには、http、https、ftp、gopher、telnet、dict、file、ldap などがあります。 libcurl は、HTTPS 証明書、HTTP POST、HTTP PUT、FTP アップロード (PHP の FTP 拡張機能を使用して完了することもできます)、HTTP フォームベースのアップロード、プロキシ、Cookie、ユーザー名 + パスワード認証もサポートしています。

利点

PHP では、URL のコンテンツを取得するのは実際には非常に簡単です。 file_get_contents() 関数を使用するなど、さまざまな方法があります。 code>file_get_contents( ) 関数は非常に便利ですが、柔軟性が低く、エラーを処理できません。一部の複雑なリクエストでは、リクエスト ヘッダー、Cookie、プロキシ、認証、およびその他の関連情報を設定できず、フォーム データをサーバーに送信したり、ファイルをアップロードしたりすることもできません。 file_get_contents() 函数:

<?php
$content = file_get_contents("https://segmentfault.com");
var_dump($content);

虽然 file_get_contents() 函数使用起来很方便,但是不够灵活,也没法进行错误处理。在一些复杂的请求中,不能够设置请求头、Cookie、代理、认证等相关信息,更不能向某个服务器提交表单数据,上传文件。

cURl 库不但支持丰富的网络协议,而且提供了设置各种 URL 请求参数的方法,功能强大。cURL 的使用场景有很多,比如访问网页资源,获取 WebService 接口数据、下载 FTP 服务器文件。

使用

基本步骤

要使用 cURL 来发送 URL 请求,步骤大体分为以下四步:

  1. 初始化 cURL 会话;

  2. 设置请求选项;

  3. 执行 cURL 会话;

  4. 关闭 cURL 会话。

// 1. 初始化 cURL 会话
$ch = curl_init();

// 2. 设置请求选项
curl_setopt($ch, CURLOPT_URL, "https://segmentfault.com");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); # 获取的信息以字符串返回,而不是直接输出
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); # 禁止 cURL 验证对等证书,从而支持 HTTPS 访问

// 3. 执行 cURL 会话
$response = curl_exec($ch);
var_dump($response);

// 4. 关闭 cURL 会话
curl_close($ch);
cURL 主要通过 curl_setopt() 函数设置请求选项,具体的每个选项说明请见 http://php.net/manual/zh/func...

错误处理

通过 curl_error() 函数可以查看 cURL 会话错误详情,而 curl_getinfo() 函数可以查看响应信息。因此,通过这两个函数我们可以实现一个简单的错误处理程序,比如我们现在访问一个不存在的 URL 地址:

<?php

// 1. 初始化 cURL 会话
$ch = curl_init();

// 2. 设置请求选项
curl_setopt($ch, CURLOPT_URL, "https://segmentfault.com/test.php"); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); # 获取的信息以字符串返回,而不是直接输出
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); # 禁止 cURL 验证对等证书,从而支持 HTTPS 访问

// 3. 执行 cURL 会话
$response = curl_exec($ch);

if ($response  === FALSE) {
    echo "cURL connert error: " . curl_error($ch);
    exit;
}

$info = curl_getinfo($ch);
if ($info[&#39;http_code&#39;] == 404) {
    echo &#39;HTTP 404&#39;;
    exit;
}

var_dump($response);

// 4. 关闭 cURL 会话
curl_close($ch);

实战案例

1. POST 请求

使用 cURL 模拟发送 POST 请求:

<?php
function curl_post($url, $data) {
    $ch = curl_init(); 

    curl_setopt_array($ch, [
        CURLOPT_URL => $url,
        CURLOPT_RETURNTRANSFER => 1, # 获取的信息以字符串返回
        CURLOPT_POST => 1,           # 发送 POST 请求
        CURLOPT_POSTFIELDS => $data, # POST 请求数据 
    ]);

    $response = curl_exec($ch);
    
    curl_close($ch);
    
    return $response;
}

$url  = &#39;http://localhost/test.php&#39;;
$data = [&#39;id&#39; => 1, &#39;username&#39; => &#39;jochen&#39;];
echo curl_post($url, $data);

2. 文件上传

CURLOPT_POSTFIELDS:全部数据使用 HTTP 协议中的 "POST" 操作来发送。 要发送文件,在文件名前面加上@前缀并使用完整路径。 文件类型可在文件名后以 ';type=mimetype' 的格式指定。 这个参数可以是 urlencoded 后的字符串,类似'val1=1&val2=2&...',也可以使用一个以字段名为键值,字段数据为值的数组。

通过 cURL 发送 POST 请求来实现文件上传:

<?php
function curl_upload($url, $data) {
    $ch = curl_init(); 

    curl_setopt_array($ch, [
        CURLOPT_URL => $url,
        CURLOPT_RETURNTRANSFER => 1, # 获取的信息以字符串返回
        CURLOPT_POST => 1,           # 发送 POST 请求
        CURLOPT_POSTFIELDS => $data, # POST 请求数据 
    ]);

    $response = curl_exec($ch);
    
    curl_close($ch);
    
    return $response;
}

$url  = &#39;http://localhost/test.php&#39;;
$data = [&#39;id&#39; => 1, &#39;file&#39; => &#39;@/root/image/boy.jpg&#39;];
echo curl_post($url, $data);

3. 文件下载

其实,文件下载与普通 GET 请求是一样的,只是文件下载把返回内容保存至文件中,而不是简单的输出。配合 file_put_contents() 函数实现文件下载:

56b62e99cd671c33a22cc122cd1dca25 $url,
        CURLOPT_RETURNTRANSFER => 1, # 获取的信息以字符串返回
    ]);

    $response = curl_exec($ch);
    
    curl_close($ch);
    
    return file_put_contents($path, $response);
}

curl_download('http://localhost/boy.jpg', './boy.jpg');

4. HTTP 认证

如果服务器端需要验证请求,设置 CURLOPT_USERPWD

cURLl ライブラリは、豊富なネットワーク プロトコルをサポートするだけでなく、強力なさまざまな URL リクエスト パラメーターを設定するメソッドも提供します。 cURL には、Web リソースへのアクセス、WebService インターフェイス データの取得、FTP サーバー ファイルのダウンロードなど、多くの使用シナリオがあります。

使い方

基本手順

cURL を使用して URL リクエストを送信するには、手順は大きく次の 4 つの手順に分かれます。セッション;

cURL セッションを閉じます。
  1. <?php
    function curl_auth($url, $user, $passwd) {
        $ch = curl_init();
        
        curl_setopt_array($ch, [
            CURLOPT_URL => $url,
            CURLOPT_USERPWD => "$user:$passwd", # 格式为:"[username]:[password]"
            CURLOPT_RETURNTRANSFER => 1
        ]);
        
        $result = curl_exec($ch);
        
        curl_close($ch);
        
        return $result;
    }
    
    echo curl_auth(&#39;http://localhost&#39;, &#39;jochen&#39;, &#39;password&#39;);

    cURL は主に curl_setopt() 関数を通じてリクエスト オプションを設定します。各オプションの詳細については、http://php.net/manual/zh/func... を参照してください。
  2. エラー処理
  3. curl_error() 関数を使用して cURL セッション エラーの詳細を表示でき、curl_getinfo() 関数を使用して応答情報を表示できます。したがって、これら 2 つの関数を通じて、たとえば、存在しない URL アドレスにアクセスすることができます:

    <?php
    // 模拟登录获取 Cookie
    function curl_login($url, $data, $cookie) {
        $ch = curl_init(); 
    
        curl_setopt_array($ch, [
            CURLOPT_URL => $url,
            CURLOPT_POST => 1,           # 发送 POST 请求
            CURLOPT_POSTFIELDS => $data, # POST 请求数据 
            CURLOPT_COOKIEJAR => $cookie # 将 cookie 信息保存至文件中
            CURLOPT_RETURNTRANSFER => 1, # 获取的信息以字符串返回
        ]);
    
        $response = curl_exec($ch);
        
        curl_close($ch);
        
        return $response;
    }
    
    // 获取页面数据
    function curl_content($url, $cookie) {
        $ch = curl_init(); 
        
        curl_setopt_array($ch, [
            CURLOPT_URL => $url,
            CURLOPT_COOKIEFILE => $cookie # 加载包含 Cookie 数据的文件
            CURLOPT_RETURNTRANSFER => 1, # 获取的信息以字符串返回
        ]);
    
        $response = curl_exec($ch);
        
        curl_close($ch);
        
        return $response;
    }
    
    $post = [&#39;username&#39; => &#39;jochen&#39;, &#39;password&#39; => &#39;123456&#39;];
    $cookie = &#39;./cookie.txt&#39;;
    if (curl_login(&#39;http://localhost/login&#39;, $post,  $cookie)) {
        echo curl_content(&#39;http://localhost&#39;, $cookie);
    }
  4. 実際的なケース
  5. 1. POST リクエストの送信をシミュレートするには、cURL を使用します。

    <?php
    require __DIR__ . &#39;/vendor/autoload.php&#39;;
    
    use \Curl\Curl;
    
    $curl = new Curl();
    $curl->get(&#39;https://www.example.com/&#39;);
    
    if ($curl->error) {
        echo &#39;Error: &#39; . $curl->errorCode . &#39;: &#39; . $curl->errorMessage . "\n";
    } else {
        echo &#39;Response:&#39; . "\n";
        var_dump($curl->response);
    }
  6. 2. ファイルのアップロード
  7. CURLOPT_POSTFIELDS: すべてのデータは、HTTP プロトコルの「POST」操作を使用して送信されます。 ファイルを送信するには、ファイル名の前に @ を付け、フルパスを使用します。 ファイルタイプは、ファイル名の後に「;type=mimetype」の形式で指定できます。 このパラメータは、「val1=1&val2=2&...」のような URL コード化された文字列にすることも、フィールド名をキーとして、フィールド データを値として持つ配列を使用することもできます。

  8. cURL を介して POST リクエストを送信して、ファイルのアップロードを実装します:
rrreee

3. ファイルのダウンロード

実際、ファイルのダウンロードは、返されたコンテンツを単にファイルに保存するのではなく、ファイルに保存する点を除いて、通常の GET リクエストと同じです。それを出力することです。 file_put_contents() 関数と連携してファイルのダウンロードを実装します:

rrreee4. HTTP 認証

サーバーがリクエストを検証する必要がある場合は、CURLOPT_USERPWD パラメーターを設定します:

rrreee5. 模擬ログイン

ここでは、ログイン状態を維持するために Cookie を使用するアプリケーションを主に示します。まず、アカウントとパスワードを使用してログインして Cookie データを取得し、次にログインした Cookie を使用してページ データを取得する必要があります: 🎜rrreee🎜cURL パッケージ化ライブラリ🎜🎜PHP Curl クラスは、よく書かれた cURL パッケージ化ライブラリです。非常に便利に HTTP リクエストを送信し、あらゆる種類の Web API と統合できます。 PHP Curl クラス ラッパー ライブラリは、PHP 5.3、5.4、5.5、5.6、7.0、7.1、および HHVM で使用できます。このライブラリはよく知られており、非常に単純な構文を提供します: 🎜rrreee🎜 参考記事: 🎜🎜🎜🎜クライアント URL ライブラリ 🎜🎜🎜🎜 PHP でのcurlの入門チュートリアルと一般的な使用例 🎜🎜🎜🎜 in PHP CURLを使用すると、わずか数行でサーバーを「騙す」ことができます - PHP カールの詳細な分析と一般的な落とし穴🎜🎜🎜🎜トップ 7: PHP に最適な Curl ラッパー ライブラリ🎜🎜🎜🎜🎜関連する推奨事項: 🎜🎜🎜PHP の同時実行でのcurlの使用バックエンドのアクセス時間を短縮します🎜🎜🎜🎜PHP は、CURL を介してログインとデータの取得をシミュレートします🎜🎜

以上がPHPのcURLライブラリの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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