【问题标题】:unset curl CURLOPT_POSTFIELDS取消设置 curl CURLOPT_POSTFIELDS
【发布时间】:2014-06-16 20:34:36
【问题描述】:

我有一个 PHP 类,用于将一些数据发布到服务器,并使用相同的打开连接获取一些数据。 问题是这段代码将尝试在第二个请求中从第一个请求发布数据......

curl_setopt(self::$ecurl, CURLOPT_CUSTOMREQUEST, "PUT");
curl_setopt(self::$ecurl, CURLOPT_POSTFIELDS, $data);
$request=curl_exec(self::$ecurl);
curl_setopt(self::$ecurl, CURLOPT_CUSTOMREQUEST, "GET");
$request=curl_exec(self::$ecurl);

所以我需要取消设置CURLOPT_POSTFIELDS 的方法。我尝试使用curl_setopt(self::$ecurl, CURLOPT_POSTFIELDS, null);,但无论如何 curl 在请求的标头中发送Posting 0 bytes...

另外请注意,我需要使用完全相同的连接,所以我无法通过 curl_init 创建另一个连接。

【问题讨论】:

    标签: php curl libcurl


    【解决方案1】:

    在最后一次请求之前将CURLOPT_HTTPGET 设置为true

    来自PHP.net

    CURLOPT_HTTPGET

    TRUE 将 HTTP 请求方法重置为 GET。由于 GET 是默认设置,因此只有在请求方法已更改时才需要这样做。

    【讨论】:

    • 快速说明 - 我试图像这样删除 CURLOPT_POSTFIELDS:curl_setopt($curl CURLOPT_POSTFIELDS, false); 但显然即使将它们设置为 false 也会将请求方法更改回 POST。所以请确保不要将 POSTFIELDS 设置为 false 设置请求类型之后。
    • 你是对的,有一些选项可以隐式设置请求类型。通常在典型工作负载是给定选项设置的工作负载的情况下。
    【解决方案2】:

    您可以将 curl 选项添加到数组中并使用 curl_setopt_array

    这将使取消设置(或设置)您的选项数组元素变得容易。

    $options = array(
                   CURLOPT_URL => 'http://www.example.com/',
                   CURLOPT_CUSTOMREQUEST => 'PUT',
                   CURLOPT_POSTFIELDS => $post_data
               );
    
    // condition on which you want to unset
    if ($condition == true) {
        unset($options[CURLOPT_POSTFIELDS]);
    }
    ...
    curl_setopt_array($ch, $options);
    
    // grab URL and pass it to the browser
    curl_exec($ch);
    

    我知道这是一个老问题,但仍然认为这种方法很方便。

    【讨论】:

    • 这不适用于原始问题中他们重新使用之前已将 CURLOPT_POSTFIELDS 设置为选项的 Curl 对象 ($ch) 的情况。
    猜你喜欢
    • 2011-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-18
    • 2017-12-08
    • 2014-03-25
    • 1970-01-01
    相关资源
    最近更新 更多