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即可.