php发送http标头

时间:2011-10-19 16:04:27

标签: php http http-headers

我使用php函数file_get_contents,其中一个params是http标头。我把它们做成这样的:

if (strpos($key, 'HTTP_') === 0) {
    $key = strtolower(strtr(substr($key, 5), '_', '-'));
    $this->headers .= $key . ': ' . $value . '\r\n';
}

但这是一个问题,我应该用双引号发送标题:

"Connection: close\r\nContent-Length: $data_len\r\n"

以下是如何提出请求的示例:

$opts = array(
        'http'  =>  array(
            'method'    => "GET",
            'header'    => $this->headers
        )
);

$this->data = file_get_contents('http://phd.yandex.net/detect', false, stream_context_create($opts));

但是失败了。如果我用自定义的http标头字符串替换数组中的$this->headers,一切正常。

如何让它正常工作?

1 个答案:

答案 0 :(得分:5)

\r\n需要在双引号中,以便正确解析字符。其他所有内容都可以使用单引号添加,没问题。在单引号字符串中使用反斜杠只解析了一些内容,例如\\\'\"

您的标题如下所示:

Key: Value\r\nKey: value\r\n

\r\n显示为实际字符串时,如果您希望它看起来像这样:

Key: Value
Key: Value

\r\n实际上在标题中创建了新行。