【问题标题】:How to skip HTTP/1.1 400 Bad Request如何跳过 HTTP/1.1 400 错误请求
【发布时间】:2014-06-06 11:54:51
【问题描述】:

我正在从 web 服务加载一些 XML 文件,但有时会失败。

我加载所有这些 XML 文件,然后使用 PHP+simpleXML 将其渲染为一个 XML。问题是,如果一个 XML 失败,那么我所有的最终 XML 都搞砸了,因为我得到了 HTTP/1.1 400 Bad Request。

有没有办法跳过这个错误?我尝试了下面的代码,但它不适合我:

$xmlDetails = simplexml_load_file($url, "SimpleXMLElement", LIBXML_NOERROR |  LIBXML_ERR_NONE | LIBXML_NOWARNING);

if ($xmlDetails)
{ here i manipulate the $xmlDetails }

【问题讨论】:

  • 试一试?
  • 首先在 xml 文件上使用 file_get_contents() 并使用正则表达式检查响应代码。然后如果没问题,将文件处理程序对象传递给simplexml_load_file
  • 你能给我一些关于如何使用正则表达式检查响应代码的指导吗?我在这部分卡住了。
  • 忘记响应代码。只需做一个简单的检查,看看你是否得到了 xml。例如,请参阅我的答案。
  • PHP simplexml_load_file catch 403 的可能副本。找到了一个完全实现我所说的问题,将其标记为重复。

标签: php xml simplexml bad-request


【解决方案1】:

您希望 xml 重新获得成功,对吗?因此,请检查响应以查看是否返回。

$xmlDetails = simplexml_load_file($url, "SimpleXMLElement", LIBXML_NOERROR |  LIBXML_ERR_NONE | LIBXML_NOWARNING);

if ($xmlDetails && substr(trim($xmlDetails), 0, 4) == "<?xml"))
{ 
  // here i manipulate the $xmlDetails 
}

未经测试,但简单的事情就足够了。不过,我建议与其中一个 cmets 相同。将 xml 的获取和解析分为两步。

【讨论】:

  • 是的,我知道了,但是这个仍然不起作用,因为一旦它通过 file_get_contents 或 simplexml_load_file 读取 $url,我就会收到错误请求。我可能需要使用@ohgodwhy 正在使用的正则表达式,但我不知道该怎么做。
  • Bad Request 是如何返回的,在 $xmlDetails 还是什么?
  • 对于导致错误请求的 url,$xmlDetails 的值是多少?
  • 如果我在浏览器上打开 $url 这就是我得到的:cl.ly/code/1I1H2R2B2y3s
  • 修复它。我必须在 simplexml_load_file 之前添加一个 @。问题现已解决!
猜你喜欢
  • 2017-07-21
  • 1970-01-01
  • 2015-04-10
  • 1970-01-01
  • 2023-03-11
  • 1970-01-01
  • 2014-10-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多