phpcurlsetopt
A. 如何在php中獲取curl請求的請求頭信息及相應頭信息
oCurl=curl_init();
//設置請求頭
$header[]="Content-type:application/x-www-form-urlencoded";
$user_agent="Mozilla/5.0(WindowsNT6.1)AppleWebKit/537.36(KHTML,likeGecko)Chrome/33.0.1750.146Safari/537.36";
curl_setopt($oCurl,CURLOPT_URL,$sUrl);
curl_setopt($oCurl,CURLOPT_HTTPHEADER,$header);
//返回response_header,該選項非常重要,如果不為true,只會獲得響應的正文
curl_setopt($oCurl,CURLOPT_HEADER,true);
//是否不需要響應的正文,為了節省帶寬及時間,在只需要響應頭的情況下可以不要正文
curl_setopt($oCurl,CURLOPT_NOBODY,true);
//使用上面定義的uacurl_setopt($oCurl,CURLOPT_USERAGENT,$user_agent);curl_setopt($oCurl,CURLOPT_RETURNTRANSFER,1);
//不用POST方式請求,意思就是通過GET請求
curl_setopt($oCurl,CURLOPT_POST,false);$sContent=curl_exec($oCurl);
//獲得響應結果里的:頭大小
$headerSize=curl_getinfo($oCurl,CURLINFO_HEADER_SIZE);
//根據頭大小去獲取頭信息內容
$header=substr($sContent,0,$headerSize);
curl_close($oCurl);
B. php curl的幾種用法
總結一下項目中用到curl的幾種方式 1. php curl的默認調用方法,get方式訪問url $ch = curl_init(); curl_setopt($ch, CURLOPT_HTTPHEADER, $header); //設置http頭 curl_setopt($ch, CURLOPT_ENCODING, "gzip" ); //設置為客戶端支持gzip壓縮 curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30 ); //設置連接等待時間 curl_setopt($ch, CURLOPT_URL, $url ); curl_exec( $ch ); if ($error = curl_error($ch) ) {//出錯處理return -1;}fclose($fp); $curl_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); //獲取http返回值 if( $curl_code == 200 ) { //正常訪問url}//異常 2. 設置http header支持curl訪問lighttpd伺服器Java代碼$header[]= 'Expect:'; $header[]= 'Expect:'; 3. 設置curl,只獲取http header,不獲取body:Java代碼curl_setopt($ch, CURLOPT_HEADER, 1); curl_setopt($ch, CURLOPT_NOBODY, 1); curl_setopt($ch, CURLOPT_HEADER, 1); curl_setopt($ch, CURLOPT_NOBODY, 1); 或者只獲取body:Java代碼curl_setopt($ch, CURLOPT_HEADER, 0); // make sure we get the body curl_setopt($ch, CURLOPT_NOBODY, 0); curl_setopt($ch, CURLOPT_HEADER, 0); // make sure we get the body curl_setopt($ch, CURLOPT_NOBODY, 0); 4. 訪問虛擬主機,需設置Host $header[]= 'Host: '.$host; 5. 使用post, put, delete等REStful方式訪問urlpost:curl_setopt($ch, CURLOPT_POST, 1 ); put, delete: curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "DELETE"); //或者PUT,需要伺服器支持這些方法。6. 保存下載內容為文件
C. PHP curl 獲取響應的狀態嗎
PHP curl可以從伺服器端模擬一個http請求,例如抓取網頁、模擬登陸等。根據選項設置,可以在curl_exec的返回結果中獲取到響應頭和body,但這沒有響應的狀態嗎。想要獲取狀態碼,需要在執行curl_exec後再通過curl_getinfo來獲取。例如:
$ch=curl_init();
curl_setopt($ch,CURLOPT_URL,'http://www.google.com.hk');
curl_setopt($ch,CURLOPT_TIMEOUT,200);
curl_setopt($ch,CURLOPT_HEADER,FALSE);
curl_setopt($ch,CURLOPT_NOBODY,FALSE);
#curl_setopt($ch,CURLOPT_POSTFIELDS,"username=".$username."&password=".$password);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,TRUE);
curl_setopt($ch,CURLOPT_FOLLOWLOCATION,FALSE);
curl_setopt($ch,CURLOPT_CUSTOMREQUEST,'GET');
curl_exec($ch);
$httpCode=curl_getinfo($ch,CURLINFO_HTTP_CODE);//獲取
D. 如何判斷php中curl模擬登陸是否成功
/**
* 模擬登錄
*/
//初始化變數
$cookie_file = "tmp.cookie";
$login_url = "";
$verify_code_url = "";
echo "正在獲取COOKIE...\n";
$curlj = curl_init();
$timeout = 5;
curl_setopt($curl, CURLOPT_URL, $login_url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, $timeout);
curl_setopt($curl,CURLOPT_COOKIEJAR,$cookie_file); //獲取COOKIE並存儲
$contents = curl_exec($curl);
curl_close($curl);
echo "COOKIE獲取完成,正在取驗證碼...\n";
//取出驗證碼
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $verify_code_url);
curl_setopt($curl, CURLOPT_COOKIEFILE, $cookie_file);
curl_setopt($curl, CURLOPT_HEADER, 0);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$img = curl_exec($curl);
curl_close($curl);
$fp = fopen("verifyCode.jpg","w");
fwrite($fp,$img);
fclose($fp);
echo "驗證碼取出完成,正在休眠,20秒內請把驗證碼填入code.txt並保存\n";
//停止運行20秒
sleep(20);
echo "休眠完成,開始取驗證碼...\n";
$code = file_get_contents("code.txt");
echo "驗證碼成功取出:$code\n";
echo "正在准備模擬登錄...\n";
$post = "username=maben&pwd=hahahaha&verifycode=$code";
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER,1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $post);
curl_setopt($curl, CURLOPT_COOKIEFILE, $cookie_file);
$result=curl_exec($curl);
curl_close($curl);
//這一塊根據自己抓包獲取到的網站上的數據來做判斷
if(substr_count($result,"登錄成功")){
echo "登錄成功\n";
}else{
echo "登錄失敗\n";
exit;
}
E. 如何在php中獲取curl請求的請求頭信息及相應頭信息
獲取請求頭信息,可以在curl_exec函數執行前,添加代碼curl_setopt($ch,CURLINFO_HEADER_OUT,true);在curl_exec函數執行後,通過 curl_getinfo($ch,CURLINFO_HEADER_OUT) 來獲取curl執行請求的請求數據。
獲取響應頭信息,可以在curl_exec函數執行前,添加代碼 curl_setopt($ch, CURLOPT_HEADER, true);curl_setopt($ch, CURLOPT_NOBODY,true); 之後 通過curl_exec函數來獲取響應頭信息。獲取設置 curl_setopt($ch, CURLOPT_NOBODY,false);然後對curl_exec獲取的值通過\r\n\r\n進行分割截取第一部分即為響應頭信息。
F. 怎樣用php中的curl模擬登陸
/**
* 模擬登錄
*/
//初始化變數
$cookie_file = "tmp.cookie";
$login_url = "http://xxx.com/logon.php";
$verify_code_url = "http://xxx.com/verifyCode.php";
echo "正在獲取COOKIE...\n";
$curlj = curl_init();
$timeout = 5;
curl_setopt($curl, CURLOPT_URL, $login_url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, $timeout);
curl_setopt($curl,CURLOPT_COOKIEJAR,$cookie_file); //獲取COOKIE並存儲
$contents = curl_exec($curl);
curl_close($curl);
echo "COOKIE獲取完成,正在取驗證碼...\n";
//取出驗證碼
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $verify_code_url);
curl_setopt($curl, CURLOPT_COOKIEFILE, $cookie_file);
curl_setopt($curl, CURLOPT_HEADER, 0);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$img = curl_exec($curl);
curl_close($curl);
$fp = fopen("verifyCode.jpg","w");
fwrite($fp,$img);
fclose($fp);
echo "驗證碼取出完成,正在休眠,20秒內請把驗證碼填入code.txt並保存\n";
//停止運行20秒
sleep(20);
echo "休眠完成,開始取驗證碼...\n";
$code = file_get_contents("code.txt");
echo "驗證碼成功取出:$code\n";
echo "正在准備模擬登錄...\n";
$post = "username=maben&pwd=hahahaha&verifycode=$code";
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER,1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $post);
curl_setopt($curl, CURLOPT_COOKIEFILE, $cookie_file);
$result=curl_exec($curl);
curl_close($curl);
//這一塊根據自己抓包獲取到的網站上的數據來做判斷
if(substr_count($result,"登錄成功")){
echo "登錄成功\n";
}else{
echo "登錄失敗\n";
exit;
}
G. PHP CURL_EXEC和 curl_setopt($ch,CURLOPT_RETURNTRANSFER, 0);書解
例1:CURLOPT_RETURNTRANSFER設為true時
$cu = curl_init();
curl_setopt($cu, CURLOPT_URL, "www.sina.com.cn");
curl_setopt($cu, CURLOPT_RETURNTRANSFER, true);
curl_exec($cu);
這樣不會輸出結果,好比是return,要echo curl_exec($cu);才會看到結果
例2:CURLOPT_RETURNTRANSFER設為false時
$cu = curl_init();
curl_setopt($cu, CURLOPT_URL, "www.sina.com.cn");
curl_setopt($cu, CURLOPT_RETURNTRANSFER, false);
curl_exec($cu);
這樣就直接看到結果了,好比直接echo了
H. PHP 的 cUrl中curl_setopt 的參數CURLOPT_POST的值0與1的區別
curl_setopt原型為bool curl_setopt ( resource $ch , int $option , mixed $value ),第三個值一般為bool,表示是否啟用第二個option,這里為CURLOPT_POST,設置為1,表示啟用時會發送一個常規的POST請求,類型為:application/x-www-form-urlencoded,就像表單提交的一樣
I. 求助,PHP CURL的問題.curl
cURL 是一種功能強大的庫,支持很多不同的協議、選項,能提供 URL 請求相關的各種細節信息。
在學習更為復雜的功能之前,先來看一下在PHP中建立cURL請求的基本步驟:
初始化
設置變數
執行並獲取結果
釋放cURL句柄
// 1. 初始化
$ch = curl_init();
// 2. 設置選項,包括URL
curl_setopt($ch, CURLOPT_URL, "http://www.nettuts.com");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
// 3. 執行並獲取HTML文檔內容
$output = curl_exec($ch);
// 4. 釋放curl句柄
curl_close($ch);
第二步(也就是 curl_setopt() )最為重要,一切玄妙均在此。有一長串cURL參數可供設置,它們能指定URL請求的各個細節。要一次性全部看完並理解可能比較困難,所以今天我們只試一下那些更常用也更有用的選項。
檢查錯誤
你可以加一段檢查錯誤的語句(雖然這並不是必需的):
// ...
$output = curl_exec($ch);
if ($output === FALSE) {
echo "cURL Error: " . curl_error($ch);
}
// ...
請注意,比較的時候我們用的是「=== FALSE」,而非「== FALSE」。因為我們得區分 空輸出 和 布爾值FALSE,後者才是真正的錯誤。
J. 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);