【问题标题】:HTTP Error 400. The request is badly formedHTTP 错误 400。请求格式错误
【发布时间】:2013-09-12 04:26:08
【问题描述】:

我遇到了同样的错误,请建议

$url="http://domain.com/manage/File Name.xml";
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);                
curl_setopt($ch, CURLOPT_URL, $url);    // get the url contents
$data = curl_exec($ch); // execute curl request
curl_close($ch);
echo $data;

【问题讨论】:

  • 您是否检查过$url 是否需要转义?例如,用 URI 编码的等效替换空格和其他字符
  • 非常感谢 Edouard Lopez,在 URL 中添加 %20 空间效果非常好 :)

标签: php xml curl


【解决方案1】:

当您的 curl url 包含空格时,就会出现此错误。您必须对 url 进行编码以删除空格。

$base_url = "http://domain.com/manage/";
$url = "File Name.xml";
$ch = curl_init();
$final_url = $base_url . curl_escape($ch, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);                
curl_setopt($ch, CURLOPT_URL, $url);    // get the url contents
$data = curl_exec($ch); // execute curl request
curl_close($ch);
echo $data;

【讨论】:

    【解决方案2】:

    如评论中所述,您的网址包含未编码的字符(空格)。

    解决方案

    设置CURLOPT_URL

    编码您的网址

    curl_setopt($ch, CURLOPT_URL, urlencode($url));
    

    您也可以使用curl_escape() 对查询字符串部分进行编码。

    参考文献

    【讨论】:

      【解决方案3】:

      您需要在发送请求之前对您的 URL 进行编码

      <?php
      $url=urlencode("http://domain/file name.xml");
      ?>
      

      urlencode

      【讨论】:

      • 嗨@tim 我也得到同样的错误我使用你的代码之后我得到空白响应
      【解决方案4】:

      此处的答案建议使用 url_encode 或 curl_escape 函数。如果您想符合 RFC 3986,请改用 rawurlencode() 函数。这有助于 PHP 7 中的 curl 请求。希望它可以帮助其他人。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-11-18
        • 1970-01-01
        • 2012-02-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多