php发送http标头

Yek*_*ver 2 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';
}
Run Code Online (Sandbox Code Playgroud)

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

"Connection: close\r\nContent-Length: $data_len\r\n"
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

如何让它正常工作?

ani*_*son 5

\r\n需求是在双引号,这样的字符是正确分析.其他所有内容都可以使用单引号添加,没问题.只有很少的东西都用单引号字符串,如反斜线解析\\,\'\".

你的标题看起来像这样:

Key: Value\r\nKey: value\r\n
Run Code Online (Sandbox Code Playgroud)

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

Key: Value
Key: Value
Run Code Online (Sandbox Code Playgroud)

\r\n实际创建的头一个新的生产线.