![](/img/trans.png)
[英]PHP curl: CURLOPT_URL, CURLOPT_POST, and CURLOPT_POSTFIELDS
[英]CURLOPT_POST vs. CURLOPT_POSTFIELDS: Is CURLOPT_POST option required?
我是PHP的cURL新手。 我對卷曲選項的使用有疑問。
考慮兩個腳本文件:test1.php和test2.php都存在於根www中。 我正在使用Ubuntu 12.04 LTS 。 PHP的libcurl版本是7.22.0 。
test1.php的內容
<?php
$ch = curl_init();
$post_data = array(
'firstname' => 'John',
'lastname' => 'Doe'
);
curl_setopt($ch, CURLOPT_URL, 'localhost/test2.php');
curl_setopt($ch, CURLOPT_POST, TRUE); //is it optional?
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
curl_exec($ch);
curl_close($ch);
?>
test2.php的內容
<?php
var_dump($_POST);
?>
當我通過瀏覽器執行test1.php時,我可以看到發布的結果。 現在,如果我刪除包含CURLOPT_POST的 curl選項,該示例仍然有效。 即使我將CURLOPT_POST設置為false,也會執行post並顯示結果。 那么, CURLOPT_POST根本不需要嗎? 看起來選項CURLOPT_POSTFIELDS
負責通過POST發送數據,而不使用CURLOPT_POST
選項。 當我在test2.php中打印$_SERVER
時,請求方法始終設置為POST
(帶或不帶選項CURLOPT_POST
)。
有誰可以讓我知道CURLOPT_POST
選項的確切用法? 是否需要通過POST
發送數據?
你是對的。 CURLOPT_POSTFIELDS意味着CURLOPT_POST 。 使用CURLOPT_POSTFIELDS時不需要使用CURLOPT_POST 。 在這種情況下,請求方法將始終設置為POST。
請注意,只要您希望它是POST 請求 ,這就是您的情況。
如果您不想成為POST 請求但設置了CURLOPT_POSTFIELDS ,請參閱此相關問答:
為了將來參考,API文檔會說明CURLOPT_POST
摘要:
true參數告訴庫執行常規HTTP發布。 這也將使庫使用“Content-Type:application / x-www-form-urlencoded”標題。 (這是迄今為止最常用的POST方法)。
使用CURLOPT_POSTFIELDS選項指定要發布的數據,使用CURLOPT_POSTFIELDSIZE設置數據大小。 (可選)您可以使用CURLOPT_READFUNCTION和CURLOPT_READDATA選項向POST提供數據。
您可以通過使用CURLOPT_HTTPHEADER設置自己來覆蓋默認的POST Content-Type:標頭。
在HTTP 1.1中使用POST意味着使用“Expect:100-continue”標頭。 您可以像往常一樣使用CURLOPT_HTTPHEADER禁用此標頭。
如果對HTTP 1.1服務器使用POST,則在開始POST之前,如果使用分塊編碼,則可以在不知道大小的情況下發送數據。 您可以通過使用CURLOPT_HTTPHEADER添加類似“Transfer-Encoding:chunked”的標頭來啟用此功能。 對於HTTP 1.0或沒有分塊傳輸,您必須在請求中指定大小。
如果您已發出POST請求並希望改為使用HEAD或GET,則必須使用CURLOPT_NOBODY或CURLOPT_HTTPGET或類似方法明確選擇新請求類型。
我現在正在測試是否設置CURLOPT_POST嘗試將覆蓋我的CURLOPT_HTTPHEADER,“Content-Type:application / json; charset = utf-8”設置。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.