【问题标题】:PHP Curl Not Behaving Like Command Line CurlPHP Curl 的行为不像命令行 Curl
【发布时间】:2012-02-14 20:07:38
【问题描述】:

我已经通过命令行 curl 将 XML 发布到服务器并且我已经完全成功了。我实际设置的唯一选项是将内容类型设置为 application/xml 的标头。

当我转身在 PHP 中尝试此操作时,出现 500 服务器错误。

至于 curl 选项,我设置如下:

curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: application/xml'));
curl_setopt($curl, CURLOPT_POSTFIELDS, $request);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

我什至已经将 PHP 应用程序的 XML 输出复制并粘贴到命令行 curl 中,而且效果很好。我已经尝试了不同组合的各种其他卷曲选项,但没有运气。

如果我不得不猜测发生了某种编码问题,但我已经尝试对数据进行 urlencoding,但实际上我得到了一个错误的请求而不是 500。

我完全不知所措,所以如果有人有任何想法,我很想听听。

谢谢!

【问题讨论】:

  • 快速补充:服务器响应是空异常错误,但再次发送的数据应该相同...
  • 500 通常是一个简单的语法问题,打开错误报告,您可能会找到它。
  • 对不起,应该更清楚。 500 来自 curl 正在与之通信的服务器。
  • 嗯 ...我认为如果您从远程服务器返回 500 错误,则他们可能会遇到问题(只要 $request 是有效的 XML,尽管我会期待一个400 Bad Request)。我没有看到您发布的代码有任何问题。您可能会在问题中添加任何其他代码吗?或者可能是您尝试发布的 XML?

标签: php curl


【解决方案1】:

尝试从以下位置修改内容类型选项:

curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: application/xml'));

到:

curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: text/xml'));

【讨论】:

  • 我的 curl 句柄实际上是 $curl 并且接收服务器非常严格地只接受 application/xml 而不是 text/xml。
  • 您是否指定了要发帖的网址?
【解决方案2】:

值得注意的是,PHP 安装的 cURL 不必与您在服务器上安装的版本相同。检查您在 CLI ($ curl --version) 上安装的版本,然后使用 <?php phpinfo(); 之类的内容检查 PHP。

【讨论】:

  • 感谢您的帮助,但问题实际上完全无关。只是我的期望错误。
【解决方案3】:

问题不在于 PHP。我没有密切注意服务器的错误输出。由于事务 id 的数据库约束,命令行 curl 每次都在同一个地方失败,但实际上显示的是预期的输出,导致我认为它工作正常。

使用当前小时、分钟、秒作为事务 ID 的 PHP 在命令行中越过了故障点,并以空值失败,这实际上是我的 XML 的问题。问题是 null 值是远程服务器上代码中未处理的异常,因此返回的响应让我认为其他地方出了问题。

感谢您的帮助,对于野鹅追逐感到抱歉。

【讨论】:

    猜你喜欢
    • 2013-04-18
    • 1970-01-01
    • 2017-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-28
    相关资源
    最近更新 更多