【问题标题】:PHP fsockopen 400 Bad RequestPHP fsockopen 400 错误请求
【发布时间】:2015-03-30 05:07:50
【问题描述】:

我有一个奇怪的问题,我收到 400 Bad request 作为响应,我完全不知道标头有什么问题。这是我的代码:

<?php

$sock = fsockopen('IP ADDRESS', 80, $errno, $errstr);

$header = array(
    'GET / HTTP/1.1',
    'Host: stackoverflow.com',
    'User-agent: My Useragent',
    'Connection: Close'
);

fputs($sock, join('\r\n', $header));

while(!feof($sock))
{
    echo fgets($sock, 128);
    break;
}

fclose($sock);

?>

任何想法我做错了什么?

谢谢

编辑:感谢 MrCode 这个问题得到了解决。问题在这里:

fputs($sock, join('\r\n', $header));

我不得不把它改成:

fputs($sock, join("\r\n", $header)."\r\n\r\n");

注意双引号和“\r\n\r\n”

再次感谢 MrCode

【问题讨论】:

  • 我有一个类似的问题,我用 \n 加入标题。这在连接到较旧的服务器时有效,但在较新的服务器上开始失败。我猜 \r\n 是标准,较新的服务器对此更严格。

标签: php fsockopen


【解决方案1】:

您缺少\r\n\r\n,这是在最终标头之后所必需的。目前你在最终标题之后什么都没有。

将其附加到连接结果中:

fputs($sock, join("\r\n", $header) . "\r\n\r\n");

此外,您需要在 \r\n 周围使用双引号,因为使用单引号会导致 PHP 将其视为字面意思而不是新行。

【讨论】:

  • 我以前也试过,现在也试过了,但还是报400错误。 pastebin.com/MspRazgG 和截图:puu.sh/feOE7/f86c88f098.png
  • 使用双引号而不是单引号。
  • 嗯,这很尴尬..它现在工作了,非常感谢。我不知道这种事情很重要。
猜你喜欢
  • 2017-03-04
  • 2014-03-05
  • 2022-01-17
  • 1970-01-01
  • 1970-01-01
  • 2023-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多