首先,我們要知道curl_init在php安裝是是不可以使用的,我們必須開戶它才可以
在C/windows裡的php.ini中我開啟了extension=php_curl.dll的功能,然後也重啟了apapche
你看看PHP的phpinfo()中有沒有CURL擴充支援!
把php_curl.dll拷到c:/windows/和c:/windows/system32裡面 重啟apache
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()函數返回的控制代碼。
例子一: 基本例子
基本例子
| 代碼如下 |
複製代碼 |
??php // 初始化一個 cURL 對象 $curl = curl_init(); // 設定你需要抓取的URL curl_setopt($curl, CURLOPT_URL, ‘http://www.cmx8.cn’); // 設定header curl_setopt($curl, CURLOPT_HEADER, 1); // 設定cURL 參數,要求結果儲存到字串中還是輸出到螢幕上。 curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 運行cURL,請求網頁 $data = curl_exec($curl); // 關閉URL請求 curl_close($curl); // 顯示獲得的資料 var_dump($data); ?> |
例子二: POST資料
sendSMS.php,其可以接受兩個表單域,一個是電話號碼,一個是簡訊內容。
POST資料
| 代碼如下 |
複製代碼 |
??php $phoneNumber = ’13812345678′; $message = ’This message was generated by curl and php’; $curlPost = ’pNUMBER=’ . urlencode($phoneNumber) . ’&MESSAGE=’ . urlencode($message) . ’&SUBMIT=Send’; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, ’http://www.111cn.net/sendSMS.php’); curl_setopt($ch, CURLOPT_HEADER, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $curlPost); $data = curl_exec(); curl_close($ch); ?? |
例子三:使用Proxy 伺服器
使用Proxy 伺服器
| 代碼如下 |
複製代碼 |
??php $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, ’http://www.cmx8.cn’); curl_setopt($ch, CURLOPT_HEADER, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, 1); curl_setopt($ch, CURLOPT_PROXY, ’proxy.111cn.net:1080′); curl_setopt($ch, CURLOPT_PROXYUSERPWD, ’user:password’); $data = curl_exec(); curl_close($ch); ?? |
例子四: 類比登入
Curl 類比登入 discuz 程式,適合DZ7.0,將username改成你的使用者名稱,userpass改成你的密碼就可以了.
Curl 類比登入 discuz 程式
<?php
| 代碼如下 |
複製代碼 |
!extension_loaded(‘curl’) && die(‘The curl extension is not loaded.’); $discuz_url = ‘http://www.111cn.net’;//論壇地址 $login_url = $discuz_url .’/logging.php?action=login’;//登入頁地址 $get_url = $discuz_url .’/my.php?item=threads’; //我的文章 $post_fields = array(); //以下兩項不需要修改 $post_fields['loginfield'] = ‘username’; $post_fields['loginsubmit'] = ‘true’; //使用者名稱和密碼,必須填寫 $post_fields['username'] = ‘lxvoip’; $post_fields['password'] = ’88888888′; //安全提問 $post_fields['questionid'] = 0; $post_fields['answer'] = ”; //@todo驗證碼 $post_fields['seccodeverify'] = ”; //擷取表單FORMHASH $ch = curl_init($login_url); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $contents = curl_exec($ch); curl_close($ch); preg_match(‘/<input/s*type=”hidden”/s*name=”formhash”/s*value=”(.*?)”/s*//>/i’, $contents, $matches); if(!empty($matches)) { $formhash = $matches[1]; } else { die(‘Not found the forumhash.’); } //POST資料,擷取COOKIE $cookie_file = dirname(__FILE__) . ‘/cookie.txt’; //$cookie_file = tempnam(‘/tmp’); $ch = curl_init($login_url); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $post_fields); curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file); curl_exec($ch); curl_close($ch); //帶著上面得到的COOKIE擷取需要登入後才能查看的頁面內容 $ch = curl_init($get_url); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0); curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file); $contents = curl_exec($ch); curl_close($ch); var_dump($contents); |
我現在用的是 類比ie6 的:
| 代碼如下 |
複製代碼 |
function crawl_dou_request($url,$timeout=1){//php 類比get ob_start(); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_USERAGENT,”MISE 6.0″); curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT,$timeout); $file_msg = curl_exec($ch); curl_close($ch); return $file_msg; } |