基於PHP的cURL快速入門2

2021-08-31 08:45:44 字數 3794 閱讀 8572

用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 表單變數的訪問...