PHP卷曲不像命令行卷曲

时间:2012-02-14 20:07:38

标签: php curl

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

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

就我所设置的卷曲选项而言,如下所示:

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.

我完全失去了,所以如果有人有任何想法,我很乐意听到。

谢谢!

3 个答案:

答案 0 :(得分:1)

尝试从以下位置修改content-type选项:

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

到:

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

PHP,它使用当前的小时,分​​钟,秒作为事务ID,它已经超过了命令行中的失败点并且失败了一个空值,这实际上是我的XML的一个问题。问题是null值是远程服务器上的代码中未处理的异常,因此回复让我觉得其他问题出了问题。

感谢您对野鹅追逐的帮助和抱歉。