2011-07-01 8 views
0

奇妙な問題が発生しました。 私はブラウザのURLに行くと、私はきれいにフォーマットされたXML構造を返す。 リモートXMLファイルの取得で異常な文字列が返される

<root> 
<contents/> 
</root> 

は(偽のデータが)

しかし、私はカールのfile_get_contents(またはLinuxでさえwgetコマンド)を使用する場合、私はシリアル化されたデータウィッヒのいくつかの並べ替えを取得することはme.``

のため使用できません{"ルート:{"コンテンツなど

誰もがそれを修正する理由とその方法を知っていますか?

+0

あなたが使用しているコードを投稿できますか? – tradyblix

+0

あなたはURLを提供できますか? – ajreal

答えて

1

これはJSONです。
json_decode関数を使用して解析します。

1

これはおそらくContent Negotiationの問題です。

この仕組みを要約すると、ユーザーエージェントがサーバーに要求を送信すると、ユーザーエージェントはサーバーがどのようなメディアタイプを理解しているかをサーバーに通知します。より正確には、ユーザエージェントは、受け入れ可能なメディアタイプおよび関連する品質係数をリストするAccept HTTPヘッダを提供する。サーバーは、ユーザーエージェントのニーズに最も適したバージョンのリソースを提供できます。

あなたのブラウザは通常、text/htmlなどを要求するAcceptヘッダーを送信します。しかし、サーバーのデフォルトはjsonに役立つようです。 cURLリクエストで適切なAcceptヘッダーを送信して、リクエストにどのように応答するかをサーバーに伝えてください。

残念ながら、後でXMLを処理する場合は、cURLはまったく必要ありません。すべてのlibxmlベースのXML拡張機能は、リモートからロードできます。そして彼らはcustom HTTP stream contextでそうすることができます。

参考:

1

サーバーは、おそらくユーザーエージェントを検出し、それに応じて結果をフォーマットされています。 wgetでは、サーバをあなたがブラウザから来ていると思うようにするには、 '--user-agent = Mozilla/5.0(Windows NT 6.1; Win64; x64; rv:5.0)Gecko/20110619 Firefox/5.0オプションを追加してください。別の方法として、Accept Headerを使用して予期しているコンテンツの種類をサーバーに通知する方法があります。

関連する問題