PHPのcurl(file_get_contents)でAPIからレスポンスを受け取る動作を作成中なのですが、返ってくるレスポンスが何なのかわからなくて困っています。仕様書にはbodyにxmlで返すとあるのですが実行したコードは
PHP
1 2 $headers = [ 3 'Host: hoge', 4 ]; 5 6 $ch = curl_init(); 7 $url = 'https://hogehoge'; 8 curl_setopt($ch, CURLOPT_URL, $url); 9 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 10 curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 11 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 12 $xml = curl_exec($ch); 13 curl_close($ch); 14// この実行結果に問題 15 var_dump($xml); 16// XML文字列を連想配列に変換する 17 $xmlObject = simplexml_load_string($xml); 18 var_dump($xmlObject); 19 $xmlArray = json_decode(json_encode($xmlObject), true); 20 var_dump($xmlArray);
このvar_dumpの表示結果が上から
string(703) " "
object(SimpleXMLElement)#89 (0) { }
array(0) { }
と表示されます。
curlのレスポンスは文字列で返ってくると思うのですが、$xmlをvar_dumpした時のstring(703) " "は
何なのでしょうか?ちなみに$xml[0]でvar_dumpすると一文字だけ格納されています。配列を1,2,3…と確認してみると
直接ターミナルから取得した文字列が一文字ずつ格納されていました。でもimplodeしようとすると配列じゃないとエラーが出ます。
print_rでは何も表示されません。
配列じゃないのにキーを指定すると文字が入ってる。そもそもcurlのレスポンスって文字列なのでは?
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);もちゃんと書いてますし…
質問としましては
・格納されているstring(703) " "は何なのでしょうか?
・そもそも文字列でレスポンスを受け取りたい。そのための必要な記述はありますか?
皆様お手数ではございますがご教授ください。よろしくお願いします。
--更新--
頂いた回答と調査により、少し解明したことと新たな疑問点を記載します。
・文字列ではないレスポンスは返ってきている→CURLOPT_RETURNTRANSFERをtrueにしているのに文字列にならないのはなぜ?
・レスポンスをvar_dumpするとstring(703) " "とだけ表示されるがソースを表示するとxmlが表示される→なぜソース表示すると表示される?
・simplexml_load_string()しても文字列ではないからか結果が空になる。
最終的には返ってきたレスポンスを表示するのではなく、レスポンスとして返ってきたxmlを配列にしたいです。
表示は出来なくてもいいので最終的にxmlで書かれたものを配列に出来る方法をご教授ください。
よろしくお願いします

回答3件
あなたの回答
tips
プレビュー