PHP CURL用法詳解

來源:互聯網
上載者:User

PHP中的CURL函數庫(Client URL Library Function)

curl_close — 關閉一個curl會話
curl_copy_handle — 拷貝一個curl串連資源的所有內容和參數
curl_errno — 返回一個包含當前會話錯誤資訊的數字編號
curl_error — 返回一個包含當前會話錯誤資訊的字串
curl_exec — 執行一個curl會話
curl_getinfo — 擷取一個curl串連資源控制代碼的資訊
curl_init — 初始化一個curl會話
curl_multi_add_handle — 向curl批處理會話中添加單獨的curl控制代碼資源
curl_multi_close — 關閉一個批處理控制代碼資源
curl_multi_exec — 解析一個curl批處理控制代碼
curl_multi_getcontent — 返回擷取的輸出的文字資料流
curl_multi_info_read — 擷取當前解析的curl的相關傳輸資訊
curl_multi_init — 初始化一個curl批處理控制代碼資源
curl_multi_remove_handle — 移除curl批處理控制代碼資源中的某個控制代碼資源
curl_multi_select — Get all the sockets associated with the cURL extension, which can then be "selected"
curl_setopt_array — 以數組的形式為一個curl設定會話參數
curl_setopt — 為一個curl設定會話參數
curl_version — 擷取curl相關的版本資訊

curl_init()函數的作用初始化一個curl會話,curl_init()函數唯一的一個參數是可選的,表示一個url地址。
curl_exec()函數的作用是執行一個curl會話,唯一的參數是curl_init()函數返回的控制代碼。
curl_close()函數的作用是關閉一個curl會話,唯一的參數是curl_init()函數返回的控制代碼。

1. php curl的預設調用方法,get方式訪問url

 代碼如下 複製代碼

....
$ch = curl_init();
curl_setopt($ch, CURLOPT_HTTPHEADER, $header); //設定http頭
curl_setopt($ch, CURLOPT_ENCODING, "gzip" ); //設定為用戶端支援gzip壓縮
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30 ); //設定串連等待時間
curl_setopt($ch, CURLOPT_URL, $url );
curl_exec( $ch );
if ($error = curl_error($ch) ) {
//出錯處理
return -1;
}
fclose($fp);

$curl_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); //擷取http傳回值
if( $curl_code == 200 ) {
//正常訪問url
}
//異常
....

2. 設定http header支援curl訪問lighttpd伺服器
Java代碼

 代碼如下 複製代碼
$header[]= 'Expect:';

$header[]= 'Expect:';
3. 設定curl,只擷取http header,不擷取body:
Java代碼

 代碼如下 複製代碼

curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_NOBODY, 1);

curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_NOBODY, 1);

或者只擷取body:
Java代碼

 代碼如下 複製代碼

curl_setopt($ch, CURLOPT_HEADER, 0); // make sure we get the body
curl_setopt($ch, CURLOPT_NOBODY, 0);

curl_setopt($ch, CURLOPT_HEADER, 0); // make sure we get the body
curl_setopt($ch, CURLOPT_NOBODY, 0);

4. 訪問虛擬機器主機,需設定Host

 代碼如下 複製代碼
$header[]= 'Host: '.$host;

5. 使用post, put, delete等REStful方式訪問url
post:

 代碼如下 複製代碼
curl_setopt($ch, CURLOPT_POST, 1 );
put, delete:
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "DELETE"); //或者PUT,需要伺服器支援這些方法。

6. 儲存下載內容為檔案

 代碼如下 複製代碼
curl_setopt($ch, CURLOPT_FILE, $fp);

類比POST請求

 

 代碼如下 複製代碼
<?PHP
    $url = 'POST_URL';
    $fields=array(
        'a' => 'a',
        'b'   => 'b',
    );
     
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_POST, count($fields));
    curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
    ob_start();
    curl_exec($ch);
     
    $result = ob_get_contents();
     
    ob_end_clean();
    echo $result;
    curl_close($ch);
?>

模仿get登入

 代碼如下 複製代碼


<?
session_start();
$url = 'http://localhost/test/loginAct.php';
$post = 1;
$returntransfer = 1;
$port = 80;
$header = 0;
$nobody = 0;
$followlocation = 1;
$cookie_jar = $_SESSION['cookie_jar'];
$request = 'userName=huyan&pwd='.sha1(yanyan).'&ac=login';
$ch = curl_init();
$options = array(CURLOPT_URL => $url,
                    CURLOPT_HEADER => $header,
                    CURLOPT_NOBODY => $nobody,
                    CURLOPT_PORT => $port,
                    CURLOPT_POST => $post,
                    CURLOPT_POSTFIELDS => $request,
                    CURLOPT_RETURNTRANSFER => $returntransfer,
                    CURLOPT_FOLLOWLOCATION => $followlocation,
                    CURLOPT_COOKIEJAR => $cookie_jar,
                    CURLOPT_COOKIEFILE => $cookie_jar,
                    CURLOPT_REFERER => $url
                    );
curl_setopt_array($ch, $options);
$temp = curl_exec($ch);
curl_errno($ch);
curl_close($ch);
echo $temp;
?>

注意,如果你的curl不可以使用我們可以參考下面方法來開啟

啟php curl函數庫的步驟

  1).去掉windows/php.ini 檔案裡;extension=php_curl.dll前面的; /*用 echo phpinfo();查看php.ini的路徑*/

  2).把php5/libeay32.dll,ssleay32.dll複製到系統目錄windows/下

  3).重啟apache


配置php支援curl

  curl是一個利用URL文法在命令列方式下工作的檔案傳輸工具。它支援很多協議:FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE 以及 LDAP。curl同樣支援HTTPS認證,HTTP POST方法, HTTP PUT方法, FTP上傳, kerberos認證, HTTP上傳, Proxy 伺服器, cookies, 使用者名稱/密碼認證, 下載檔案斷點續傳, 上傳檔案斷點續傳, httpProxy 伺服器管道( proxy tunneling), 甚至它還支援IPv6, socks5Proxy 伺服器, 通過httpProxy 伺服器上傳檔案到FTP伺服器等等,功能十分強大。Windows作業系統下的網路螞蟻,網際快車(FlashGet)的功能它都可以做到。準確的說,curl支援檔案的上傳和下載,所以是一個綜合傳輸工具,但是按照傳統,使用者習慣稱curl為下載工具。

  配置方法:

  1、拷貝PHP目錄中的libeay32.dll 和 ssleay32.dll 兩個檔案到 system32 目錄。

  2、修改php.ini:配置好 extension_dir ,去掉 extension = php_curl.dll 前面的分號。

  ---------------------------

  php下擴充php_curl.dll的安裝

  ---------------------------

  已經內建有php_curl.dll,在ext目錄下,此DLL用於支援SSL和zlib.

  在php.ini中找到有extension=php_curl.dll, 去掉前面的注釋.

  設定extension_dir=c:phpext, 重新整理PHP頁面時報錯, 說找不到模組php_curl.dll.

  拷貝php_curl.dll 到windowssystem32,還是同樣的錯.

  在網上找了一下,需要將:

  libeay32.dll, ssleay32.dll, php5ts.dll, php_curl.dll

  都拷貝到system32目錄下,重啟IIS即可.

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.