【问题标题】:How to resolve HTTP/1.1 400 Bad Request in curl php如何在 curl php 中解决 HTTP/1.1 400 错误请求
【发布时间】:2016-01-01 20:44:17
【问题描述】:

我必须从我试图使用 curl 访问的 php 代码中点击一个 .aspx 页面 url,但我收到以下错误,并且 url 中没有空格。

HTTP/1.1 400 Bad Request Content-Type: text/html; charset=us-ascii Server: Microsoft-HTTPAPI/2.0 Date: Mon, 05 Oct 2015 08:31:13 GMT Connection: close Content-Length: 311 

下面是我试图命中的 curl 代码。所以任何人都会告诉我为什么会收到这个错误。

$api_url = 'http://www.test/xyz/OnlineOrder.aspx?';
     $url= $api_url . 'InvoiceNo=' . $invoice;
     $ch = curl_init();
     curl_setopt($ch, CURLOPT_URL, $url);
     curl_setopt($ch, CURLOPT_HEADER, 1);
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
     echo $data = curl_exec($ch);
     echo $status = curl_getinfo($ch, CURLINFO_HTTP_CODE);

【问题讨论】:

  • 目标服务如何指定?
  • 这是公司生成的条码,用于生成订单
  • 我在考虑界面。那是怎么规定的? HTTP方法、参数、标头、认证等
  • 目标服务没有任何 api 我只需要使用我在问题中提到的一些参数点击那里的 url。
  • 基本上,您的 HTTP 请求似乎没问题,因为您收到了合格的答案。我猜服务器假设要发送一些不同的东西。

标签: php curl


【解决方案1】:

我得到了Http response 200 ok 我已经仔细观察了 url,我发现一个带有空格的参数导致了错误的请求。无论如何,如果你遇到类似问题的问题,请从 url 和那里的参数中删除空格。

使用urlencode($url);

【讨论】:

  • 有时 urlencode() 不会产生预期的效果。就我而言,rawurlencode() 也没有。我不得不求助于 str_replace 来替换空格,只是为了让服务器返回 200。stackoverflow.com/questions/38995268/…
【解决方案2】:

如果对任何人有帮助,我的问题是我必须在 curl 中使用 POST 方法,但不需要 POST 参数,因为 API 仅从 URL 查询字符串中获取值。所以,在POSTFIELDS 中传递空数组解决了我的问题。我的猜测是它取决于服务器上的 Apache/PHP 设置,它是否允许 POST 请求没有 post 参数。

【讨论】:

  • 谢谢,这解决了我的问题。在我的本地工作正常,但在我将空数组添加到 CURLOPT_POSTFIELDS 之前无法在现场工作。
  • 这是我的解决方案
猜你喜欢
  • 2023-03-11
  • 2014-03-05
  • 2017-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-10
  • 1970-01-01
相关资源
最近更新 更多