【问题标题】:Why did I get a 400 Bad Request when getting a page with PHP Curl?为什么我在使用 PHP Curl 获取页面时收到 400 Bad Request?
【发布时间】:2010-04-01 21:12:59
【问题描述】:

我试图使用 curl 访问页面。我可以使用浏览器完美地访问它,并使用“静态”字符串作为 URL,例如:

$url = "http://www.example.com/?q=1234"

但是当我尝试使用 URL 字符串中的变量访问页面时:

$url = "http://www.example.com/?q=$param"

我收到 400 错误代码。我在网上查了一下,在thisstackoverflow线程中找到了一些cmets:

然后,出于好奇,我做了以下操作:

$url = "http://www.example.com/?q=" . trim($param);

它成功了!不,$param 不包含任何空格。

对我来说,这似乎是一些编码错误,但我真的找不到解释。 stackoverflow 中的任何人都知道它可能是什么吗?

提前致谢:)

【问题讨论】:

    标签: php


    【解决方案1】:

    好吧,如果你 100% 确定它不包含空格,那么 $param 可能包含其他字符之一 trim() cuts away with

    • “\t”(ASCII 9 (0x09)),一个制表符。
    • “\n”(ASCII 10 (0x0A)),换行(换行)。
    • “\r”(ASCII 13 (0x0D)),回车。
    • “\0”(ASCII 0 (0x00)),NUL 字节。
    • “\x0B”(ASCII 11 (0x0B)),垂直制表符。

    您可以使用ord() 确定:

    $string = "\nTEST\r";
    for ($i = 0; $i <= strlen($string)-1;  $i++) 
     echo "(".ord($string[$i]).")";
    

    这个sn-p会输出字符串中的所有字符值,包括不可见字符的值:

     (10)(84)(69)(83)(84)(13)
    

    10 是字符串开头的换行符。

    【讨论】:

      【解决方案2】:

      也许该网站拒绝外部请求,所以也许尝试添加一个引荐来源值作为网站和一个客户端浏览器值作为 firefox。也许这可以欺骗它并接受请求。

      【讨论】:

        【解决方案3】:

        最好的办法是在赋值后回显 $url 变量。这样您就可以准确地看到其中的内容。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2022-01-11
          • 1970-01-01
          • 2015-09-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多