利用Php的CURL POST提交表單登入執行個體詳解_PHP教程

來源:互聯網
上載者:User
前面有講過很多關於php curl函數來實現post提交資料,下面我來給大家介紹一種提交xml一種提交表單資料了。


例1

CURL使用POST提交XML資料

代碼如下 複製代碼

$url = "http://www.bKjia.c0m";

$ch = curl_init();
$header[] = "Content-type: text/xml";//定義content-type為xml
curl_setopt($ch, CURLOPT_URL, $url); //定義表單提交地址
curl_setopt($ch, CURLOPT_POST, 1); //定義提交類型 1:POST ;0:GET
curl_setopt($ch, CURLOPT_HEADER, 1); //定義是否顯示狀態頭 1:顯示 ; 0:不顯示
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);//定義請求類型
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0);//定義是否直接輸出返迴流
curl_setopt($ch, CURLOPT_POSTFIELDS, $data); //定義提交的資料,這裡是XML檔案
curl_close($ch);//關閉

在PHP中CURL使用POST提交XML資料時,一定要定義content-type為xml,要不然預設是text/html!

例2,post表單資料

curl是利用URL文法在命令列方式下工作的檔案傳輸工具。
php教程執行個體:

代碼如下 複製代碼
set_time_limit(0);
@date_default_timezone_set('Asia/Shanghai');
function curlrequest($url,$postfield,$proxy=""){
$proxy=trim($proxy);
$user_agent ="Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)";
$ch = curl_init(); // 初始化CURL控制代碼
if(!empty($proxy)){
curl_setopt ($ch, CURLOPT_PROXY, $proxy);//設定Proxy 伺服器
}
curl_setopt($ch, CURLOPT_URL, $url); //佈建要求的URL
//curl_setopt($ch, CURLOPT_FAILONERROR, 1); // 啟用時顯示HTTP狀態代碼,預設行為是忽略編號小於等於400的HTTP資訊
//curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);//啟用時會將伺服器伺服器返回的“Location:”放在header中遞迴的返回給伺服器
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);// 設為TRUE把curl_exec()結果轉化為字串,而不是直接輸出
curl_setopt($ch, CURLOPT_POST, 1);//啟用POST提交
curl_setopt($ch, CURLOPT_POSTFIELDS, $postfield); //設定POST提交的字串
//curl_setopt($ch, CURLOPT_PORT, 80); //設定連接埠
curl_setopt($ch, CURLOPT_TIMEOUT, 25); // 逾時時間
curl_setopt($ch, CURLOPT_USERAGENT, $user_agent);//HTTP請求User-Agent:頭
//curl_setopt($ch,CURLOPT_HEADER,1);//設為TRUE在輸出中包含頭資訊
//$fp = fopen("example_homepage.txt", "w");//輸出檔案
//curl_setopt($ch, CURLOPT_FILE, $fp);//設定輸出檔案的位置,值是一個資源類型,預設為STDOUT (瀏覽器)。
curl_setopt($ch,CURLOPT_HTTPHEADER,array(
'Accept-Language: zh-cn',
'Connection: Keep-Alive',
'Cache-Control: no-cache'
));//設定HTTP頭資訊
$document = curl_exec($ch); //執行預定義的CURL
$info=curl_getinfo($ch); //得到返回資訊的特性
//print_r($info);
if($info[http_code]=="405"){
echo "bad proxy {$proxy}n"; //代理出錯
exit;
}
//curl_close($ch);
return $document;
}
//請求URL
$url="http://example.cn/getInfo.php";
//POST提交資料,可用HTTPWATCH查看
$postfield="userName=test&year=2008&passWord=123456&Submit=%CC%E1%BD%BB";
//Proxy 伺服器
$proxy = '';
//請求
$str=curlrequest($url,$postfield,$proxy);
//輸出結果
echo $str;


例3,一個簡單利用curl post登入執行個體


類比post登陸提交表單問題

SOOPY類:
之前寫過一個程式是類比post來推送一些資源
起初跟大家一樣,各種百度Google,首先想到的就是用PHP內建的庫CURL這個來類比
自己想偷偷懶看有沒有更簡單的類來實現呢?
還是被我發現了,他就是snoopy類。(中文名史盧比)

代碼如下 複製代碼

//首先要引用這個類
include("/data/tools/pooy/Snoopy/Snoopy.class.php");
$snoopy = new Snoopy;
//$Parameters這個是要提交的數組
$Parameters["username"] = "user";
$Parameters["pass"] = "pass";
$file = "/test/test.jpg";
$serviceUrl = "http://www.你的地址/fileProcess.php";
$postfiles["image"] = $file; //$filename上傳檔案相對路徑 例如"upload/taoav.jpg";image/jpg
$snoopy->_submit_type = "multipart/form-data"; //設定submit類型
$snoopy->submit($serviceUrl,$Parameters,$postfiles);


//$postforms,$postfiles為2中類型的值,其中$postfiles為上傳檔案數組

上面這個例子就是實現了一個POST表單提交的案例。由於需求比較複雜,這個snoopy的功能不能滿足於我的需求,於是又開始
去進攻CURL。
CURL擴充庫:
這個庫是比較成熟的一個擴充庫,功能很強大。強大到可以類比瀏覽器的任何一個動作。
需求是這樣子的:
第一登陸一個網站後台
第二介面頁面,然後開始推送大量資源
(這裡面的具體邏輯就縮減了)
為了操作方便,我把我需要類比的幾個函數封裝到了一個類裡面,簡短代碼如下:

代碼如下 複製代碼
/*
類比資源推送類
2012-09-14 by POOY
*/
class TuisongPost{

//用構造登陸認證
function TuisongPost(){

//存放COOKIE的檔案
global $cookie_jar;
$this->cookie_jar = tempnam('./tmp','cookie');
$url = "http://www.你的地址";

$post_data = array( "username" => "admin","password" => "admin" );

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $url);

curl_setopt($ch, CURLOPT_POST, 1);

curl_setopt($ch, CURLOPT_HEADER, 1);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0);

curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);

curl_setopt($ch, CURLOPT_COOKIEJAR, $this->cookie_jar); //儲存cookie資訊

$output1 = curl_exec($ch);

curl_close($ch);

//echo $this->cookie_jar."n";
}
/*得到組ID*/
function getGid($groupname,$channel,$lanmu){

$url = "http://XXXX.com/creategroup";

//格式化要推送的資料
$data = $this->getGidArr($groupname,$channel,$lanmu);

$ch = curl_init();

$Ref_url = "http://www.你的地址";

curl_setopt($ch, CURLOPT_URL, $url);

curl_setopt($ch, CURLOPT_REFERER, $Ref_url); //偽裝REFERER

curl_setopt($ch, CURLOPT_POST, 1); //post方式提交資料

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //返回資料,而不是直接輸出

curl_setopt($ch, CURLOPT_HEADER, 0); // 設定是否顯示header資訊 0是不顯示,1是顯示 預設為0

curl_setopt($ch, CURLOPT_COOKIEFILE, $this->cookie_jar); //發送cookie檔案

curl_setopt($ch, CURLOPT_POSTFIELDS, $data); //發送POST資料

$output2 = curl_exec($ch); //發送HTTP請求

//這個傳回值是用作判斷的依據
return $output2;
curl_close($ch);
//$this->unlink($this->cookie_jar);
}

//推送資料
function sendPic($note,$groupid,$groupindex,$img){

$url = "http://XXXX/addimage";

$groupid = intval($groupid);
$data = $this->sendPicArr($note,$groupid,$groupindex,$img);

$ch = curl_init();

$Ref_url = "http://www.你的地址";

curl_setopt($ch, CURLOPT_URL, $url);

curl_setopt($ch, CURLOPT_REFERER, $Ref_url); //偽裝REFERER

curl_setopt($ch, CURLOPT_POST, 1); //post方式提交資料

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //返回資料,而不是直接輸出

curl_setopt($ch, CURLOPT_HEADER, 0); // 設定是否顯示header資訊 0是不顯示,1是顯示 預設為0

curl_setopt($ch, CURLOPT_COOKIEFILE, $this->cookie_jar); //發送cookie檔案

curl_setopt($ch, CURLOPT_POSTFIELDS, $data); //發送POST資料

$output2 = curl_exec($ch); //發送HTTP請求
return $output2 ;
curl_close($ch);
//$this->unlink($this->cookie_jar);
}

/*推送資料操作*/
function sendMes($url,$img,$imgdesc,$groupid,$groupname,$channel,$lanmu)
{
//var_dump($this->cookie_jar);
//exit();
$url = "http://XXXX/add";

$data = $this->getArr($img,$imgdesc,$groupid,$groupname,$channel,$lanmu);

$ch = curl_init();

$Ref_url = "http://www.你的地址";

curl_setopt($ch, CURLOPT_URL, $url);

curl_setopt($ch, CURLOPT_REFERER, $Ref_url); //偽裝REFERER

curl_setopt($ch, CURLOPT_POST, 1); //post方式提交資料

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //返回資料,而不是直接輸出

curl_setopt($ch, CURLOPT_HEADER, 0); // 設定是否顯示header資訊 0是不顯示,1是顯示 預設為0

curl_setopt($ch, CURLOPT_COOKIEFILE, $this->cookie_jar); //發送cookie檔案

curl_setopt($ch, CURLOPT_POSTFIELDS, $data); //發送POST資料

$output2 = curl_exec($ch); //發送HTTP請求

curl_close($ch);
//$this->unlink($this->cookie_jar);
}

function getArr($img,$imgdesc,$groupid,$groupname,$channel,$lanmu)
{
$post_data = array(
//windows使用如下寫法,linux不適用
//"img"=>"@".$img.";type=image/jpeg",
"img"=>"@".$img,
"imgdesc"=>$imgdesc,
"groupid"=>$groupid,
"groupname"=>$groupname,
"channel"=>$channel,
"lanmu"=>$lanmu,
"cdate"=>date('Y-m-d')
);
return $post_data;
}
//格式化getGidArr
function getGidArr($groupname,$channel,$lanmu)
{
$post_data = array(
"groupname"=>$groupname,
"channel"=>$channel,
"lanmu"=>$lanmu,
"cdate"=>date('Y-m-d')
);
return $post_data;
}
//格式化sendPicArr
function sendPicArr($note,$groupid,$groupindex,$img)
{
$post_data = array(
"notes"=>$note,
"id"=>$groupid,
"index"=>$groupindex,
"cdate"=>date('Y-m-d'),
//windows使用如下寫法,linux不適用
//"img"=>"@".$img.";type=image/jpeg",
"img"=>"@".$img
);
return $post_data;
}

//清理cookie檔案
function unlink($cookie_jar){
unlink($cookie_jar);
}
}

以上就是用CURL來完美解決了這個問題,他能有效解決cookie儲存問題。

http://www.bkjia.com/PHPjc/632781.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/632781.htmlTechArticle前面有講過很多關於php curl函數來實現post提交資料,下面我來給大家介紹一種提交xml一種提交表單資料了。 例1 CURL使用POST提交XML資料 代碼...

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.