簡體   English   中英

CURLOPT_POST與CURLOPT_POSTFIELDS:是否需要CURLOPT_POST選項?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM