在PHP中使用curl_exec(),如何使用空值创建自定义HTTP标头?

时间:2013-07-03 03:37:30

标签: php http-headers

这个问题大致相当于这里讨论的问题:

http://curl.haxx.se/mail/lib-2010-08/0118.html

重点是某些Web服务(不方便)需要POSTing 空HTTP标头值。因此,例如,您可能拥有RESTful API 这需要POST的HTTP标头:

Content-Type: text/json
Content-Length: 1024
...
Custome-Header-Field: hello
Required-Empty-Header-Field:
...
Connection: Keep-Alive

这里的要点是必须指定 Required-Empty-H​​eader-Field ,并且必须为空。

如何在PHP上下文中的curl_exec中执行此操作?

我将回答我自己的问题,因为这花了我一段时间才弄明白。 但我很想知道其他程序员不得不说的话。

2 个答案:

答案 0 :(得分:1)

// Assume we are POSTing data from the variable $data.
$http_header = array(
  "Content-Type: application/x-www-form-urlencoded" . "\r\n" .
  "Content-Length: ". strlen($data) . "\r\n" .
  ...
  "Custome-Header-Field: hello" . "\r\n" .
  "Required-Empty-Header-Field:" . "\r\n" .
  ...
  "Connection: Keep-Alive",
  "Other-Value-One: world",
  "Other-Value-Two: thisworks");

// Add optional headers.
if (!empty($some_condition)) {
  array_push($http_header, "Other-Value-Three: whatever");
}

// Set up curl_exec.
$curl = curl_init();
$url = "https://www.somewhere-over-the-rainbow.com";
curl_setopt($curl, CURLOPT_URL,$url);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
curl_setopt($curl, CURLOPT_HTTPHEADER, $httpHeader);
$response = curl_exec($curl);
curl_close($curl);

答案 1 :(得分:0)

我没有对此进行过测试,但请尝试为该值设置空格。这可能会超过cURL正在进行的任何验证,并且应该忽略标题中值之前的空格。