2012-02-14 22 views
2

コマンドラインcurlを使用してXMLをサーバーに送信しましたが、私は完全に成功しました。私が実際に設定している唯一のオプションは、content-typeをapplication/xmlに設定するヘッダーです。PHP curlがコマンドラインCurlのように動作しない

私が回って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出力を貼り付けするように行ってきた:次のように私は設定していますすべての

限りカールのオプションがありますそれはうまく動作します。さまざまな組み合わせでさまざまなカールオプションを試してみました。

Iが発生しているエンコーディングの問題のいくつかの種類があります推測しなければならなかったが、私は、データをURLエンコードしようとしたと私は実際に代わり500

の不正な要求を取り戻すなら、私は完全によ誰かが私がそれらを聞いて好きなアイデアを持っている場合は、損失。

ありがとうございます!

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

へ:

+0

クイック追加:サーバーレスポンスはNull例外エラーですが、再度送信されるデータは同じである必要があります。 – PetrolMan

+0

500は通常、単純な構文問題のターンエラーレポートです。おそらくそれを見つけるでしょう。 – Zac

+0

申し訳ありませんが、より明確になっているはずです。 500は、カールが通信しているサーバーからのものです。 – PetrolMan

答えて

0

問題はPHPではありませんでした。私は、サーバーからのエラー出力に細心の注意を払っていませんでした。コマンドラインcurlは、トランザクションidのデータベース制約のため毎回同じ場所で失敗しましたが、実際には期待される出力を表示していて、正しく動作していると思うようになりました。

トランザクションIDの現在の時、分、秒を使用していたPHPは、コマンドラインの失敗点を超え、null値で失敗しました。これは実際に私のXMLに問題でした。問題は、リモートサーバー上のコードでnull値が処理されない例外であったため、応答が戻ってきて、何か他のものが間違っていると思ってしまったということです。

野生のガチョウの追跡についてのご協力ありがとうございます。

1

てみからコンテンツタイプのオプションを変更する

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

私のカールハンドルは実際には$ curlという名前になっています。受信側のサーバーはapplication/xmlだけで、text/xmlではなく非常に厳しいです。 – PetrolMan

+0

あなたが投稿しているURLを指定しましたか? – mlinuxgada

1

それがインストールされているのcURL PHPが同じバージョンである必要はないことは注目に値しますあなたがあなたのサーバーにインストールしたものです。 CLI($ curl --version)にインストールしたバージョンを確認してから、<?php phpinfo();のような形式でPHPをチェックしてください。

+0

助けてくれてありがとうが、問題は実際には完全に無関係でした。私の終わりに誤った期待のちょうど場合。 – PetrolMan