2012-02-14 286 views
2

我已經通過命令行curl將XML發佈到服務器,並且我已經完全成功。我實際設置的唯一選項是將內容類型設置爲application/xml的標題。PHP捲曲不像命令行卷曲

當我轉身在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輸出粘貼到命令行卷曲匆匆它工作得很好。我嘗試過不同組合的其他捲髮選項,但沒有運氣。

如果我猜有某種正在發生編碼問題,但我試過URL編碼的數據居然和我得到一個錯誤的請求,而不是500

我在一個完整的所以如果有人有任何想法,我很樂意聽到他們。

謝謝!

+0

快速添加:服務器響應是一個空異常錯誤,但再次發送的數據應該是相同的... – PetrolMan 2012-02-14 20:09:17

+0

500通常是一個簡單的語法問題轉彎錯誤報告,您可能會發現它。 – Zac 2012-02-14 20:10:01

+0

對不起,應該已經更清楚了。 500是從服務器curl與之通信的。 – PetrolMan 2012-02-14 20:15:24

回答

0

問題不在於PHP。我沒有密切關注服務器的錯誤輸出。每次由於數據庫對事務ID的限制,命令行curl每次都在同一地點失敗,但實際上顯示的是預期的輸出,導致我認爲它正常工作。

PHP正在使用當前小時,分鐘,秒作爲事務ID,它已經越過了命令行中的失敗點,並失去了一個空值,這實際上是我的XML問題。問題是空值是遠程服務器上的代碼中未處理的異常,所以響應讓我覺得還有其他問題。

感謝您對野雁追捕的幫助和遺憾。

1

嘗試修改從內容類型選項:

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

到:

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

我的捲曲手柄實際上名稱爲$ curl,而接收服務器對於只採用application/xml而非text/xml非常嚴格。 – PetrolMan 2012-02-14 21:00:44

+0

您是否指定了要發佈的網址? – mlinuxgada 2012-02-14 21:16:48

1

值得注意的捲曲PHP安裝了不必須是相同的版本你已經安裝在你的服務器上。查看CLI上已安裝的版本($ curl --version),然後使用類似<?php phpinfo();的方式檢查PHP。

+0

感謝您的幫助,但問題實際上完全不相關。只是一個錯誤的期望,我的目的。 – PetrolMan 2012-02-14 21:19:05