未设置卷曲CURLOPT_POSTFIELDS

时间:2014-06-16 20:34:37

标签: php curl libcurl

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

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创建另一个连接。

2 个答案:

答案 0 :(得分:4)

在上次请求之前将CURLOPT_HTTPGET设置为true

来自PHP.net

CURLOPT_HTTPGET

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

答案 1 :(得分:0)

您可以将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);

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