用POST方法發(fā)送數(shù)據(jù)
當(dāng)發(fā)起GET請求時(shí),數(shù)據(jù)可以通過“查詢字串”(query string)傳遞給一個(gè)URL。例如,在google中搜索時(shí),搜索關(guān)鍵即為URL的查詢字串的一部分:
http://www.google.com/search?q=nettuts
這種情況下你可能并不需要cURL來模擬。把這個(gè)URL丟給“file_get_contents()”就能得到相同結(jié)果。
不過有一些HTML表單是用POST方法提交的。這種表單提交時(shí),數(shù)據(jù)是通過 HTTP請求體(request body) 發(fā)送,而不是查詢字串。例如,當(dāng)使用CodeIgniter論壇的表單,無論你輸入什么關(guān)鍵字,總是被POST到如下頁面:
http://codeigniter.com/forums/do_search/
你可以用PHP腳本來模擬這種URL請求。首先,新建一個(gè)可以接受并顯示POST數(shù)據(jù)的文件,我們給它命名為post_output.php:
print_r($_POST);
接下來,寫一段PHP腳本來執(zhí)行cURL請求:
$url = "http://localhost/post_output.php"; $post_data = array ( "foo" => "bar", "query" => "Nettuts", "action" => "Submit" ); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // 我們在POST數(shù)據(jù)哦! curl_setopt($ch, CURLOPT_POST, 1); // 把post的變量加上 curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); $output = curl_exec($ch); curl_close($ch); echo $output;
執(zhí)行代碼后應(yīng)該會得到以下結(jié)果:
這段腳本發(fā)送一個(gè)POST請求給 post_output.php ,這個(gè)頁面 $_POST 變量并返回,我們利用cURL捕捉了這個(gè)輸出。
文件上傳
上傳文件和前面的POST十分相似。因?yàn)樗械奈募蟼鞅韱味际峭ㄟ^POST方法提交的。
首先新建一個(gè)接收文件的頁面,命名為 upload_output.php:
print_r($_FILES);
以下是真正執(zhí)行文件上傳任務(wù)的腳本:
$url = "http://localhost/upload_output.php"; $post_data = array ( "foo" => "bar", // 要上傳的本地文件地址 "upload" => "@C:/wamp/www/test.zip" ); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); $output = curl_exec($ch); curl_close($ch); echo $output;
如果你需要上傳一個(gè)文件,只需要把文件路徑像一個(gè)post變量一樣傳過去,不過記得在前面加上@符號。執(zhí)行這段腳本應(yīng)該會得到如下輸出:
出處:藍(lán)色理想
責(zé)任編輯:moby
上一頁 基于PHP的cURL快速入門 [2] 下一頁 基于PHP的cURL快速入門 [4]
◎進(jìn)入論壇網(wǎng)絡(luò)編程版塊參加討論
|