cURL是一個利用URL語法在命令行下工作的文件傳輸工具,cURL支持的通信協議有FTP、FTPS、HTTP、HTTPS、等,并且還支持SSL認證、HTTP POST、HTTP PUT、FTP上傳。最讓人高興的是,PHP也支持 CURL 庫,利用cURL庫編寫的腳本,可以通過一個網址的鏈接抓取一個指定的頁面內容,并分析得到你想要的數據了。

cURL使用步驟

1,初始化  

curl_init()

国产视频app 2、設置屬性 

curl_setopt().

有一長串CURL 參數可供設置,它們能指定URL請求的各個細節。具體參數,請查看文未的附錄

国产视频app 3,執行并獲取結果

curl_exec()

4,釋放句柄

curl_close()

PHP CURL實現GET請求

發送GET請求的關鍵是拼裝格式正確的URL。請求地址和GET數據由一個“?”分割,然后GET變量的名稱和值用“=”分隔,各個GET名稱和值由“&”連接。PHP為我們提供了一個函數專門用來拼裝GET請求和數據部分——http_build_query,該函數接受一個關聯數組,返回由該關聯數據描述的GET請求字符串。

示例代碼:

$data = array(
"username" => "coder",
"password" => "12345"
);
$url = 'http://xswdd.cn';
//初始化
$ch = curl_init();
//設置選項,包括URL
$url = $url.'?'.http_bulid_query($data);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
//執行并獲取HTML文檔內容
$output = curl_exec($ch);
//釋放curl句柄
curl_close($ch);
//打印獲得的數據
print_r($output);

PHP CURL實現POST請求

可以使用CURL提供的選項CURLOPT_POSTFIELDS,設置該選項為POST字符串數據就可以把請求放在正文中。同樣我們實現了一個發送POST請求的函數

示例代碼

$url = "http://xswdd.cn/s.php";
$post_data = array ("username" => "bob","key" => "12345");
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// post數據
curl_setopt($ch, CURLOPT_POST, 1);
// post的變量
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
$output = curl_exec($ch);
curl_close($ch);
//打印獲得的數據
print_r($output);

PHP cURL封裝函數代碼

//參數1:訪問的URL,參數2:post數據(不填則為GET),參數3:提交的$cookies,參數4:是否返回$cookies
function curl_request($url,$post='',$cookie='', $returnCookie=0){
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0)');
    curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($curl, CURLOPT_AUTOREFERER, 1);
    curl_setopt($curl, CURLOPT_REFERER, "http://XXX");
    if($post) {
        curl_setopt($curl, CURLOPT_POST, 1);
        curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($post));
    }
    if($cookie) {
        curl_setopt($curl, CURLOPT_COOKIE, $cookie);
    }
    curl_setopt($curl, CURLOPT_HEADER, $returnCookie);
    curl_setopt($curl, CURLOPT_TIMEOUT, 10);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    $data = curl_exec($curl);
    if (curl_errno($curl)) {
        return curl_error($curl);
    }
    curl_close($curl);
    if($returnCookie){
        list($header, $body) = explode("\r\n\r\n", $data, 2);
        preg_match_all("/Set\-Cookie:([^;]*);/", $header, $matches);
        $info['cookie']  = substr($matches[1][0], 1);
        $info['content'] = $body;
        return $info;
    }else{
        return $data;
    }
}

補充說明:

国产视频app 如果使用cURL獲取的數據為 json格式的,可以使用 json_decode()函數轉化成數組

$array = json_decode($data,true);

注意:json_decode()函數中第個參數不填寫的化,會把 json 轉成對象的形式,如果填寫則轉為數組。

国产视频app 關于json_decode()函數的用法,可以參考本站的相關文章。

附錄:關于 curl_setopt() 中的參數介紹

PHP中使用cURL方法,PHP中使用cURL實現Get和Post請求的方法,PHP遠程請求,PHP使用CURL詳解

CURLOPT_NOBODY: //如果你不想在輸出中包含body部分,設置這個選項為一個非零值。
CURLOPT_FAILONERROR: //如果你想讓PHP在發生錯誤(HTTP代碼返回大于等于300)時,不顯示,設置這個選項為一人非零值。默認行為是返回一個正常頁,忽略代碼。
CURLOPT_INFILESIZE: //當你上傳一個文件到遠程站點,這個選項告訴PHP你上傳文件的大小。
CURLOPT_VERBOSE: //如果你想CURL報告每一件意外的事情,設置這個選項為一個非零值。
CURLOPT_HEADER: //如果你想把一個頭包含在輸出中,設置這個選項為一個非零值。
CURLOPT_NOPROGRESS: //如果你不會PHP為CURL傳輸顯示一個進程條,設置這個選項為一個非零值。
//注意:PHP自動設置這個選項為非零值,你應該僅僅為了調試的目的來改變這個選項。
CURLOPT_UPLOAD: //如果你想讓PHP為上傳做準備,設置這個選項為一個非零值。
CURLOPT_POST: //如果你想PHP去做一個正規的HTTP POST,設置這個選項為一個非零值。這個POST是普通的 application/x-www-from-urlencoded 類型,多數被HTML表單使用
CURLOPT_FTPLISTONLY: //設置這個選項為非零值,PHP將列出FTP的目錄名列表。
CURLOPT_FTPAPPEND: //設置這個選項為一個非零值,PHP將應用遠程文件代替覆蓋它。
CURLOPT_NETRC: //設置這個選項為一個非零值,PHP將在你的 ~./netrc 文件中查找你要建立連接的遠程站點的用戶名及密碼。
CURLOPT_FOLLOWLOCATION: //設置這個選項為一個非零值(象 'Location: ')的頭,服務器會把它當做HTTP頭的一部分發送(注意這是遞歸的,PHP將發送形如 'Location: '的頭)。
CURLOPT_RESUME_FROM: //傳遞一個包含字節偏移地址的長整形參數,(你想轉移到的開始表單)。
CURLOPT_SSLVERSION: //傳遞一個包含SSL版本的長參數。默認PHP將被它自己努力的確定,在更多的安全中你必須手工設置。
CURLOPT_TIMECONDITION: //傳遞一個長參數,指定怎么處理CURLOPT_TIMEVALUE參數。你可以設置這個參數為TIMECOND_IFMODSINCE 或 TIMECOND_ISUNMODSINCE。這僅用于HTTP。
CURLOPT_TIMEVALUE: //傳遞一個從1970-1-1開始到現在的秒數。這個時間將被CURLOPT_TIMEVALUE選項作為指定值使用,或被默認TIMECOND_IFMODSINCE使用。
CURLOPT_PUT: //設置這個選項為一個非零值去用HTTP上傳一個文件。要上傳這個文件必須設置CURLOPT_INFILE和CURLOPT_INFILESIZE選項.
CURLOPT_MUTE: //設置這個選項為一個非零值,PHP對于CURL函數將完全沉默。
CURLOPT_TIMEOUT: //設置一個長整形數,作為最大延續多少秒。
CURLOPT_LOW_SPEED_LIMIT: //設置一個長整形數,控制傳送多少字節。
CURLOPT_LOW_SPEED_TIME: //設置一個長整形數,控制多少秒傳送CURLOPT_LOW_SPEED_LIMIT規定的字節數。

//下列選項的值將被作為字符串:
CURLOPT_URL: //這是你想用PHP取回的URL地址。你也可以在用curl_init()函數初始化時設置這個選項。
CURLOPT_USERPWD: //傳遞一個形如[username]:[password]風格的字符串,作用PHP去連接。
CURLOPT_PROXYUSERPWD: //傳遞一個形如[username]:[password] 格式的字符串去連接HTTP代理。
CURLOPT_RANGE: //傳遞一個你想指定的范圍。它應該是'X-Y'格式,X或Y是被除外的。HTTP傳送同樣支持幾個間隔,用逗句來分隔(X-Y,N-M)。
CURLOPT_POSTFIELDS: //傳遞一個作為HTTP “POST”操作的所有數據的字符串。
CURLOPT_REFERER: //在HTTP請求中包含一個'referer'頭的字符串。
CURLOPT_USERAGENT: //在HTTP請求中包含一個'user-agent'頭的字符串。
CURLOPT_FTPPORT: //傳遞一個包含被ftp 'POST'指令使用的IP地址。這個POST指令告訴遠程服務器去連接我們指定的IP地址。 這個字符串可以是一個IP地址,一個主機名,一個網絡界面名(在UNIX下),或是‘-'(使用系統默認IP地址)。
CURLOPT_COOKIE: //傳遞一個包含HTTP cookie的頭連接。
CURLOPT_SSLCERT: //傳遞一個包含PEM格式證書的字符串。
CURLOPT_SSLCERTPASSWD: //傳遞一個包含使用CURLOPT_SSLCERT證書必需的密碼。
CURLOPT_COOKIEFILE: //傳遞一個包含cookie數據的文件的名字的字符串。這個cookie文件可以是Netscape格式,或是堆存在文件中的HTTP風格的頭。
CURLOPT_CUSTOMREQUEST: //當進行HTTP請求時,傳遞一個字符被GET或HEAD使用。為進行DELETE或其它操作是有益的
//注意: 在確認你的服務器支持命令先不要去這樣做。