用post方法傳送資料
當發起get請求時,資料可以通過「查詢字串」(query string)傳遞給乙個url。例如,在google中搜尋時,搜尋關鍵即為url的查詢字串的一部分:
這種情況下你可能並不需要curl來模擬。把這個url丟給「file_get_contents()」就能得到相同結果。
不過有一些html表單是用post方法提交的。這種表單提交時,資料是通過 http請求體(request body) 傳送,而不是查詢字串。例如,當使用codeigniter論壇的表單,無論你輸入什麼關鍵字,總是被post到如下頁面:
你可以用php指令碼來模擬這種url請求。首先,新建乙個可以接受並顯示post資料的檔案,我們給它命名為post_output.php:
print_r($_post);
接下來,寫一段php指令碼來執行curl請求:
以下為引用的內容:
// 我們在post資料哦!
curl_setopt($ch, curlopt_post, 1);
// 把post的變數加上
curl_setopt($ch, curlopt_postfields, $post_data);
$output = curl_exec($ch);
curl_close($ch);
echo $output;
執行**後應該會得到以下結果:
這段指令碼傳送乙個post請求給 post_output.php ,這個頁面 $_post 變數並返回,我們利用curl捕捉了這個輸出。
檔案上傳
上傳檔案和前面的post十分相似。因為所有的檔案上傳表單都是通過post方法提交的。
首先新建乙個接收檔案的頁面,命名為 upload_output.php:
print_r($_files);
以下是真正執行檔案上傳任務的指令碼:
以下為引用的內容:
// 要上傳的本地檔案位址
"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;
如果你需要上傳乙個檔案,只需要把檔案路徑像乙個post變數一樣傳過去,不過記得在前面加上@符號。執行這段指令碼應該會得到如下輸出:
curl批處理(multi curl)
curl還有乙個高階特性——批處理控制代碼(handle)。這一特性允許你同時或非同步地開啟多個url連線。
下面是來自來自php.net的示例**:
以下為引用的內容:
// 建立兩個curl資源
$ch1 = curl_init();
$ch2 = curl_init();
// 指定url和適當的引數
curl_setopt($ch1, curlopt_url, "");
curl_setopt($ch1, curlopt_header, 0);
curl_setopt($ch2, curlopt_url, "");
curl_setopt($ch2, curlopt_header, 0);
// 建立curl批處理控制代碼
$mh = curl_multi_init();
// 加上前面兩個資源控制代碼
curl_multi_add_handle($mh,$ch1);
curl_multi_add_handle($mh,$ch2);
// 預定義乙個狀態變數
$active = null;
// 執行批處理
do while ($mrc == curlm_call_multi_perform);
while ($active && $mrc == curlm_ok) while ($mrc == curlm_call_multi_perform);}}
// 關閉各個控制代碼
curl_multi_remove_handle($mh, $ch1);
curl_multi_remove_handle($mh, $ch2);
curl_multi_close($mh);
// config
$db_host = 'localhost';
$db_user = 'root';
$db_pass = '';
$db_name = 'wordpress';
$excluded_domains = array(
'localhost', 'www.mydomain.com');
$max_connections = 10;
// 初始化一些變數
$url_list = array();
$working_urls = array();
$dead_urls = array();
$not_found_urls = array();
$active = null;
// 連到 mysql
if (!mysql_connect($db_host, $db_user, $db_pass))
if (!mysql_select_db($db_name))
$q = "select post_content from wp_posts
where post_content like '%href=%'
and post_status = 'publish'
and post_type = 'post'";
$r = mysql_query($q) or die(mysql_error());
while ($d = mysql_fetch_assoc($r))
// store the url
$url_list = $url;}}
}// 移除重複鏈結
$url_list = array_values(array_unique($url_list));
if (!$url_list)
我們首先配置好資料庫,一系列要排除的網域名稱($excluded_domains),以及最大併發連線數($max_connections)。然後,連線資料庫,獲取文章和包含的鏈結,把它們收集到乙個陣列中($url_list)。 基於PHP的cURL快速入門(5)
下面的 有點複雜了,因此我將一小步一小步地詳細解釋 以下為引用的內容 1.批處理器 mh curl multi init 2.加入需批量處理的url for i 0 i max connections i 3.初始處理 do while mrc curlm call multi perform 4....
php之快速入門學習 2
php 沒有宣告變數的命令。變數在您第一次賦值給它的時候被建立 txt hello world x 5 y 10.5 echo txt 在上面的語句執行中,變數txt將儲存值hello world 且變數x將儲存值5。注釋 當您賦乙個文字值給變數時,請在文字值兩側加上引號。在上面的例項中,我們注意到...
php快速入門
1 php 嵌入格式與注釋 推薦風格,採用的xml風格 採用簡短風格 採用script風格 採用asp格式 echo order processed.注意 1 注釋的作用範圍是注釋符之後,行結束或者關閉標記之前。2 在php中,換行,空格和tab都是被認為是空格,而且多個空格無效。2 表單變數的訪問...