導航:首頁 > 編程語言 > phpcurl用法

phpcurl用法

發布時間:2023-05-12 18:49:43

php使用curl的問題

這是PHP對於curl的一個解釋,簡單地說就是,curl是一個庫,能讓你通過URL和許多不同種的伺服器進行勾搭、搭訕和深入交流,並且還支持許多協議。並且人家還說了curl可以支持https認證、http post、ftp上傳、代理、cookies、簡單口令認證等等功能啦。

Ⅱ PHP_CURL使用詳解

CURL是PHP的一個擴展,利用該擴展可以實現伺服器之間的數據或文件傳輸,用來採集網路中的html網頁文件、其他伺服器提供介面數據等。





GET請求

POST請求


Ⅲ php如何執行linux的curl指令

curl 不是即時的輸入輸出的命令,php 有運行時間限制, curl 運行會導致 curl 運行時間不夠而被殺掉的。

php 有運行 linux 命令的函數,記得 system() 是一個,之後還有另外一個。注意這兩個命令是可以在 php.ini/php.conf 裡面設置禁止使用的。

Ⅳ php的curl如何使用head協議來獲取資源的大小等信息

其實curl裡面早就有對HEAD協議的支持// 只需要在你的代碼中加上這樣一行,就會自動選擇head協議
curl_setopt($ch, CURLOPT_NOBODY, true);
如果你要讀取
Content-Length
,那麼只需要在curl_exec後// 讀取的header里的Content-Length值
$size = curl_getinfo($ch, CURLINFO_CONTENT_LENGTH_DOWNLOAD);
需要說明的是HEAD協議雖然被大部分伺服器支持,但也不是說所有的伺服器都支持,有的伺服器為了防抓取,在設置中幹掉了這個協議。而
Content-Length
也不是必須的欄位,你應該做到如果有這個值,而且超過了最大值,可以返回錯誤,如果沒有這個值,或者沒有超過最大值,就必須自己通過已經下載的內容大小來判斷。
至於你說的最大資源下載長度,我還沒看到這個設置項,不過這個問題有一個更加美好的解決方案,那就是用到
CURLOPT_HEADERFUNCTION和CURLOPT_WRITEFUNCTION
兩個回調,那麼就只需要一次請求即可完成所有的判斷,而且可以隨時斷掉$size = 0;$max_size = 123456;
curl_setopt($ch, CURLOPT_HEADERFUNCTION, function ($ch, $str) {
// 第一個參數是curl資源,第二個參數是每一行獨立的header!
list ($name, $value) = array_map('trim', explode(':', $str, 2));
$name = strtolower($name);
// 判斷大小啦
if ('content-length' == $name) {
if ($value $max_size) {
return 0; // 返回0就會中斷讀取}}});
// 對於沒有content-length的,我們一邊讀取一邊判斷
curl_setopt($ch, CURLOPT_WRITEFUNCTION, function ($ch, $str) use (&$size) {
$len = strlen($str);
$size += $len;
if ($size $max_size) {

Ⅳ php curl用法

curl 是使用URL語法的傳送文件工具鍵則,支持FTP、FTPS、HTTP HTPPS SCP SFTP TFTP TELNET DICT FILE和LDAP。curl 支持SSL證書、HTTP POST、HTTP PUT 、FTP 上嫌亮橘傳,kerberos、芹團基於HTT格式的上傳、代理、cookie、用戶+口令證明、文件傳送恢復、http代理通道和大量其他有用的技巧。

Ⅵ 解析php中curl

php的multi_curl功能慎用 因為某些版本的curl和php的搭配有Bug 所以你調試過沒問題的代碼很可能在別的機器上不正確

相信許多人對php手冊中語焉不詳的curl_multi一族的函數頭疼不已 它們文檔少 給的例子 更是簡單的讓你無從借鑒 我也曾經找了許多網頁 都沒見一個完整的應用例子 •curl_multi_add_handle •curl_multi_close •curl_multi_exec •curl_multi_getcontent •curl_multi_info_read •curl_multi_init •curl_multi_remove_handle •curl_multi_select 一般來說 想到要用這些函數時 目的顯然應該是要同時請求多個url 而不是一個一個依次請求 否老螞則不如自己循環去調curl_exec好了

步驟總結如下 第一步 調用curl_multi_init 第二步 循環調用curl_multi_add_handle 這一步需要注意的是 curl_multi_add_handle的第二個參數是由curl_init而來的子handle 第三步 持續調用curl_multi_exec 第四步 根據需要循環調用curl_multi_getcontent獲取結果 第五步 調用curl_multi_remove_handle 並為每個字handle調用curl_close 第六步 調用curl_multi_close 這里有一個網上找的簡單例子 其作者稱為dirty的例子 (稍後我會說明為何dirty)

復制代碼 代碼如下: * Here s a quick and dirty example for curl multi from PHP tested on PHP RC CLI / FreeBSD */

$connomains = array( " " " );

$mh = curl_multi_init();

foreach ($connomains as $i => $url) { $conn[$i]=curl_init($url); curl_setopt($conn[$i] CURLOPT_RETURNTRANSFER ); curl_multi_add_handle ($mh $conn[$i]); }

do { $n=curl_multi_exec($mh $active); } while ($active);

foreach ($connomains as $i => $url) { $res[$i]=curl_multi_getcontent($conn[$i]); curl_close($conn[$i]); }

print_r($res);

整個使用過程差不多就是這樣 但是 這個簡單代碼有個致命弱點 就是在do循環的那段 在整個url請求期間是個死循環 它會輕易導致CPU佔用 % 現在我們來改進它 這里要用到一個幾乎沒侍消埋有任何文檔的函數curl_multi_select了 雖然C的curl庫對select有說明 但是 php里的介面和用法確與C中有橋飢不同 把上面do的那段改成下面這樣

復制代碼 代碼如下: do { $mrc = curl_multi_exec($mh $active); } while ($mrc == CURLM_CALL_MULTI_PERFORM); while ($active and $mrc == CURLM_OK) { if (curl_multi_select($mh) != ) { do { $mrc = curl_multi_exec($mh $active); } while ($mrc == CURLM_CALL_MULTI_PERFORM); } }

因 為$active要等全部url數據接受完畢才變成false 所以這里用到了curl_multi_exec的返回值判斷是否還有數據 當有數據的時候 就不停調用curl_multi_exec 暫時沒有數據就進入select階段 新數據一來就可以被喚醒繼續執行 這里的好處就是CPU的無謂消耗沒有 了

另外 還有一些細節的地方可能有時候要遇到 控制每一個請求的超時時間 在curl_multi_add_handle之前通過curl_setopt去做 curl_setopt($ch CURLOPT_TIMEOUT $timeout);

判斷是否超時了或者其他錯誤 在curl_multi_getcontent之前用 curl_error($conn[$i]);

lishixin/Article/program/PHP/201311/21124

Ⅶ 如何使用php+curl上傳多媒體文件

$post_data = array(
"media"=>"E:\WORKS/yy.jpg"
);
$url="http://file.api.weixin.qq.com/cgi-bin/media/upload?access_token=$acctoken&type=image";
$ch = curl_init();
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_POSTFIELDS,$post_data);
ob_start();
curl_exec($ch);
$result = ob_get_contents() ;
ob_end_clean();

echo $result;

Ⅷ php 使用curl函數並附帶參數傳遞,接收返回的數據並保存在變數中

$Data=array('user'=>飢蘆'xiaoming'散畢);
$ch=爛掘帶curl_init();
curl_setopt($ch,CURLOPT_URL,'http://www.a.com/index');
curl_setopt($ch,CURLOPT_HEADER,0);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch,CURLOPT_POST,1);
curl_setopt($ch,CURLOPT_POSTFIELDS,$Data);
$a=curl_exec($ch);
curl_close($ch);

print_r($a);

Ⅸ 使用PHP的cURL庫進行網頁抓取

使用模明仿PHP的cURL庫可以簡單和有效地去抓網頁 你只需要運行一個腳本 然後分析一下你所抓取的網頁 然後就可以以程序的方式得到你想要的數據了 無論是你想從從一個鏈接上取部分數據 或是取一個XML文件並把其導入資料庫 那怕就是簡單的獲取網頁內容 cURL 是一個功能強大的PHP庫 本文主要講述如果使用這個PHP庫

啟用 cURL 設置

首先 我們得先要確定我們的PHP是否開啟了這個庫 你可以通過使用php_info()函數來得到這一信息

﹤?phpphpinfo();?﹥

如果你可以在網頁上看到下面的輸出 那麼表示cURL庫已被開啟

如果你看到的話 那麼你需要設置你的PHP並開啟這個庫 如果你是在Windows平台下 那麼非常簡單 你需要改一改你的php ini文件的設置 找到php_curl dll 並取消前面的分號注釋就行了 如下所示

//取消下在的注釋extension=php_curl dll

如果你旦纖是在Linux下面 那麼 你需要重新編譯你的PHP了 編輯時 你需要打開編譯參數——在configure命令上加上 –with curl 參數

一個小示例

如果一切就緒 下面是一個小常式

﹤?php// 初始化一個 cURL 對象$curl = curl_init();

// 設置你需要抓取的URLcurl_setopt($curl CURLOPT_URL //cocre );

// 設置headercurl_setopt($curl CURLOPT_HEADER );

// 設置cURL 參數 要求結果保存到字元串中還是輸出到屏幕上槐鏈 curl_setopt($curl CURLOPT_RETURNTRANSFER );

// 運行cURL 請求網頁$data = curl_exec($curl);

// 關閉URL請求curl_close($curl);

// 顯示獲得的數據var_mp($data);

如何POST數據

上面是抓取網頁的代碼 下面則是向某個網頁POST數據 假設我們有一個處理表單的網址// example /sendSMS php 其可以接受兩個表單域 一個是電話號碼 一個是簡訊內容

﹤?php$phoneNumber = ;$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 // example /sendSMS php );curl_setopt($ch CURLOPT_HEADER );curl_setopt($ch CURLOPT_RETURNTRANSFER );curl_setopt($ch CURLOPT_POST );curl_setopt($ch CURLOPT_POSTFIELDS $curlPost);$data = curl_exec();curl_close($ch);?﹥

從上面的程序我們可以看到 使用CURLOPT_POST設置HTTP協議的POST方法 而不是GET方法 然後以CURLOPT_POSTFIELDS設置POST的數據

關於代理伺服器

下面是一個如何使用代理伺服器的示例 請注意其中高亮的代碼 代碼很簡單 我就不用多說了

﹤?php $ch = curl_init();curl_setopt($ch CURLOPT_URL // example );curl_setopt($ch CURLOPT_HEADER );curl_setopt($ch CURLOPT_RETURNTRANSFER );curl_setopt($ch CURLOPT_HTTPPROXYTUNNEL );curl_setopt($ch CURLOPT_PROXY fakeproxy : );curl_setopt($ch CURLOPT_PROXYUSERPWD user:password );$data = curl_exec();curl_close($ch);?﹥ 關於SSL和Cookie

關於SSL也就是HTTPS協議 你只需要把CURLOPT_URL連接中的//變成//就可以了 當然 還有一個參數叫CURLOPT_SSL_VERIFYHOST可以設置為驗證站點

關於Cookie 你需要了解下面三個參數

CURLOPT_COOKIE 在當面的會話中設置一個cookie

CURLOPT_COOKIEJAR 當會話結束的時候保存一個Cookie

CURLOPT_COOKIEFILE Cookie的文件

HTTP伺服器認證

最後 我們來看一看HTTP伺服器認證的情況

﹤?php $ch = curl_init();curl_setopt($ch CURLOPT_URL // example );curl_setopt($ch CURLOPT_RETURNTRANSFER );curl_setopt($ch CURLOPT_HTTPAUTH CURLAUTH_BASIC);curl_setopt(CURLOPT_USERPWD [username]:[password] )

$data = curl_exec();curl_close($ch);?﹥

關於其它更多的內容 請參看相關的cURL手冊 lishixin/Article/program/PHP/201311/21491

閱讀全文

與phpcurl用法相關的資料

熱點內容
cocos2dluapdf 瀏覽:491
假的加密鎖靠譜嗎 瀏覽:176
經營聖手伺服器怎麼調 瀏覽:749
arduino手機編程 瀏覽:481
西醫pdf下載 瀏覽:29
後浪電影學院pdf 瀏覽:813
程序員怎麼做到不被人嫉妒 瀏覽:669
cmd新建文件夾md命令 瀏覽:570
php數組中的數值排序 瀏覽:832
安卓手機怎麼避免小孩內購 瀏覽:171
聯想伺服器出現黃色嘆號怎麼辦 瀏覽:991
約翰編譯器製作教程 瀏覽:130
大地pdf 瀏覽:109
pdfplus 瀏覽:577
匯編O命令 瀏覽:970
plt轉pdf 瀏覽:365
魔獸60宏命令大全 瀏覽:479
php志願者網站源碼 瀏覽:875
貿易pdf 瀏覽:497
dbug命令 瀏覽:352