phpcurl返回值
A. 對於https協議的網站,可以用php 的curl來模擬get請求和post請求嗎,能得到返回值嗎
可以。
CURLOPT_PROTOCOLS
CURLPROTO_* 的位域指。如果被啟用,位域值會限定libcurl在傳輸過程中有哪些可使用的協議。這將允許你在編譯libcurl時支持眾多協議,但是限制只是用它們中被允許使用的一個子集。默認libcurl將會使用全部它支持的協議。參見 CURLOPT_REDIR_PROTOCOLS .
可用的協議選項為:CURLPROTO_HTTP、CURLPROTO_HTTPS、CURLPROTO_FTP、CURLPROTO_FTPS、CURLPROTO_SCP、CURLPROTO_SFTP、CURLPROTO_TELNET、CURLPROTO_LDAP、CURLPROTO_LDAPS、CURLPROTO_DICT、CURLPROTO_FILE、CURLPROTO_TFTP、CURLPROTO_ALL
對了,可定能得到返回值
B. php curl 介面用return返回值, 接受不到
json_encode 也需要給第二個參數true才行,還有,php不支持''函數名()[0]['odd']''這種寫法,注意你的規范
C. 如何通過php的curl模擬ajax請求,獲取其返回值
這個需要配合js,打開一個html頁面,首先js用ajax請求頁面,返回第一個頁面信息確定處理完畢(ajax有強制同步功能),ajax再訪問第二個頁面。(或者根據伺服器狀況,你可以同時提交幾個URL,跑幾個相同的頁面)
參數可以由js產生並傳遞url,php後台頁面根據URL抓頁面。然後ajax通過php,在資料庫或者是哪裡設一個標量,標明檢測到哪裡。由於前台的html頁面執行多少時候都沒問題,這樣php的內存限制和執行時間限制就解決了。
因為不會浪費大量的資源用一個頁面來跑一個瞬間500次的for循環了。(你的500次for循環死了原因可能是獲取的數據太多,大過了php限制的內存)
不過印象中curl好像也有強制同步的選項,就是等待一個抓取後再執行下一步。但是這個500次都是用一個頁面線程處理,也就是說肯定會遠遠大於30秒的默認執行時間。
D. 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);
E. 請教php curl 返回 Empty reply from server 原因
看返回的狀態值就知道了,200表示請求成功,伺服器正常運行,502表示伺服器狀態不正常
F. php curl_exec無法返回結果
你要顯示是不是需要這個參數,你試試
// 設置curl 參數,要求結果保存到變數中還是輸出到屏幕上,false直接輸出到屏幕上。
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$return_data = curl_exec($ch);
curl_close($ch);
var_mp($return_data);
G. php關於curl請求回來的數據轉化數組後該索引有值卻取不出來求各路大神解決
可以先看看PHP中的 curl_exec函數的說明
(PHP 4 >= 4.0.2, PHP 5)
curl_exec — 執行一個cURL會話
說明
mixed curl_exec ( resource $ch )
執行給定的cURL會話。
這個函數應該在初始化一個cURL會話並且全部的選項都被設置後被調用。
參數
ch
由 curl_init() 返回的 cURL 句柄。
返回值
成功時返回 TRUE, 或者在失敗時返回 FALSE。 然而,如果 CURLOPT_RETURNTRANSFER選項被設置,函數執行成功時會返回執行的結果,失敗時返回 FALSE 。
我前兩天剛好用到過的兩種情況
//從返回結果中獲取指定的值$res=curl_exec($ch);$pa = '%<ul class="ul1"><li>本站主數據:(.*?)</li>%si';preg_match($pa,$res,$r);return $r[1];
//第二種 的返回結果是以json形式。$res=json_decode(curl_exec($ch),true);print_r($res);
H. php 中 怎麼讓curl_exec 以數組形式返回
可以將他返回的內容賦值給一個
變數
。只需再
前面
加上,curl_setopt($ch,CUROPT_RETURNTRANSFER,1);就可以將返回結果賦值給變數了。比如,$r=curl_exec($ch);這時返回的結果全部包含再$r中,想
什麼時候
輸出什麼時候輸出,如果不準備要他的結果,那麼就將前面的1換成0
I. 在 php curl返回
給你個我寫的curl方法。
/**
*curl模擬提交
*@param string $url 網址
*@param array/string $opt 提交參數
*@param string &$header 取回的頭信息
*@param string $redirect 是否重定向
*@param boolean $ssl 驗證https證書
*@return [type] 返回信息
*/
functioncurl($url,$opt='GET',&$header=null,$redirect=true,$ssl=false){
//初始化
$ch=curl_init($url);
//配置設置
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,$ssl);
curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,$ssl);
curl_setopt($ch,CURLOPT_FOLLOWLOCATION,$redirect);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true); #返回結果
curl_setopt($ch,CURLOPT_HEADER,true); #顯示協議頭
if(is_array($opt)){
//轉小寫
$opt=array_change_key_case($opt,CASE_LOWER);
//POST
if(isset($opt['type'])&&strtoupper($opt['type'])=='POST'){
curl_setopt($ch,CURLOPT_POST,true);
curl_setopt($ch,CURLOPT_POSTFIELDS,(isset($opt['data'])?$opt['data']:''));
}
//User-Agent
if(array_key_exists('ua',$opt))
curl_setopt($ch,CURLOPT_USERAGENT,$opt['ua']);
//Header
if(array_key_exists('header',$opt)){
curl_setopt($ch,CURLOPT_HTTPHEADER,(array)$opt['header']);
}
//Cookie
if(array_key_exists('cookie',$opt))
curl_setopt($ch,CURLOPT_COOKIE,$opt['cookie']);
//Referer
if(array_key_exists('referer',$opt))
curl_setopt($ch,CURLOPT_REFERER,$opt['referer']);
}else{
//僅POST
if(strtoupper((string)$opt)=='POST')
curl_setopt($ch,CURLOPT_POST,true);
}
$result=curl_exec($ch);
if(curl_errno($ch)){
$result=curl_error($ch);
}else{
//獲取頭長度
$length=curl_getinfo($ch,CURLINFO_HEADER_SIZE);
//取出頭信息
$header=substr($result,0,$length);
//去掉頭信息
$result=substr($result,$length);
}
//釋放
curl_close($ch);
return$result;
}