我使用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
,一切正常。
如何让它正常工作?
答案 0 :(得分:5)
\r\n
需要在双引号中,以便正确解析字符。其他所有内容都可以使用单引号添加,没问题。在单引号字符串中使用反斜杠只解析了一些内容,例如\\
,\'
和\"
。
您的标题如下所示:
Key: Value\r\nKey: value\r\n
当\r\n
显示为实际字符串时,如果您希望它看起来像这样:
Key: Value
Key: Value
\r\n
实际上在标题中创建了新行。