程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> php的curl也沒這麼復雜,phpcurl也復雜

php的curl也沒這麼復雜,phpcurl也復雜

編輯:關於PHP編程

php的curl也沒這麼復雜,phpcurl也復雜


許多同學在第一次使用curl的時候感覺一個頭兩個大(包括我在內),看著這一條條的curl_setopt函數完全摸不著頭腦,不過在你花10分鐘看了我的介紹後相信你以後也能輕松戲耍php的curl了

首先,請看一個curl代碼(花10秒鐘,略看一遍,然後跳到後文)

 1 <?php 
 2 $data = "<soap:Envelope>[...]</soap:Envelope>"; 
 3 $tuCurl = curl_init(); 
 4 curl_setopt($tuCurl, CURLOPT_URL, "https://example.com/path/for/soap/url/"); 
 5 curl_setopt($tuCurl, CURLOPT_PORT , 443); 
 6 curl_setopt($tuCurl, CURLOPT_VERBOSE, 0); 
 7 curl_setopt($tuCurl, CURLOPT_HEADER, 0); 
 8 curl_setopt($tuCurl, CURLOPT_SSLVERSION, 3); 
 9 curl_setopt($tuCurl, CURLOPT_SSLCERT, getcwd() . "/client.pem"); 
10 curl_setopt($tuCurl, CURLOPT_SSLKEY, getcwd() . "/keyout.pem"); 
11 curl_setopt($tuCurl, CURLOPT_CAINFO, getcwd() . "/ca.pem"); 
12 curl_setopt($tuCurl, CURLOPT_POST, 1); 
13 curl_setopt($tuCurl, CURLOPT_SSL_VERIFYPEER, 1); 
14 curl_setopt($tuCurl, CURLOPT_RETURNTRANSFER, 1); 
15 curl_setopt($tuCurl, CURLOPT_POSTFIELDS, $data); 
16 curl_setopt($tuCurl, CURLOPT_HTTPHEADER, array("Content-Type: text/xml","SOAPAction: \"/soap/action/query\"", "Content-length: ".strlen($data))); 
17 
18 $tuData = curl_exec($tuCurl); 
19 if(!curl_errno($tuCurl)){ 
20   $info = curl_getinfo($tuCurl); 
21   echo 'Took ' . $info['total_time'] . ' seconds to send a request to ' . $info['url']; 
22 } else { 
23   echo 'Curl error: ' . curl_error($tuCurl); 
24 } 
25 
26 curl_close($tuCurl); 
27 echo $tuData; 
28 ?>

WTF,這到底是在做什麼?

想要學會這種“高端”的用法嗎?

首先,相信你肯定知道網址大部分是由http開頭的,那是因為他們需用通過http(超文本傳送協議 HTTP-Hypertext transfer protocol)來進行數據傳輸,但是傳輸數據不是簡單的將一句"Hello"傳到服務器上就搞定的事情,發送者為了方便接受者理解發送者的實際意圖以及知道發送人到底是何許人也,發送者往往要將許多額外信息一並發給接受者,就像寄信人需要在信件外套一個信封一樣,信封上寫著各種發信人的信息。所有的這些最終合並成了一個叫做報文(message)的玩意,也就構成了整個互聯網的基礎。

curl的工作就是通過http協議發送這些message (php的libcurl目前還支持https、ftp、telnet等其他協議)

現在再看代碼,實際上代碼只做了五件事情

下面給出使用GET和POST方法如何抓取和提交任意頁面的數據
 1 <?php
 2     //初始化
 3     $curl = curl_init();
 4     //設置url
 5     curl_setopt($curl, CURLOPT_URL, 'http://www.baidu.com');
 6     //設置返回獲取的輸出為文本流
 7     curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
 8     //執行命令
 9     $data = curl_exec($curl);
10     //關閉URL請求
11     curl_close($curl);
12     //顯示獲得的數據
13     print_r($data);
14 ?>
15 
16 <?php
17     //初始化
18     $curl = curl_init();
19     //設置url
20     curl_setopt($curl, CURLOPT_URL, 'http://www.baidu.com');
21     //設置返回獲取的輸出為文本流
22     curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
23     //設置post方式提交
24     curl_setopt($curl, CURLOPT_POST, 1);
25     //設置post數據
26     curl_setopt($curl, CURLOPT_POSTFIELDS, array("data"=>"value");
27     //執行命令
28     $data = curl_exec($curl);
29     //關閉URL請求
30     curl_close($curl);
31     //打印數據
32     print_r($data);
33 ?>

感興趣的同學還可以參考php官方文檔,學習更多curl用法

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved