我已经通过命令行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.
我完全失去了,所以如果有人有任何想法,我很乐意听到。
谢谢!
答案 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值是远程服务器上的代码中未处理的异常,因此回复让我觉得其他问题出了问题。
感谢您对野鹅追逐的帮助和抱歉。