使用curl从服务器响应xml


Response xml from server using curl

我想用代码做一个API调用

<?php    
$url = "url";
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL,$url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_TIMEOUT, 10);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: application/xml"));
    $data = curl_exec($ch); 
echo $data;
if(curl_errno($ch))
    print curl_error($ch);
else
    curl_close($ch);
?>

,希望回复是这样的

<GoodreadsResponse>
<GoodreadsResponse>
  <Request>
    <!-- ... request metadata omitted ... -->
  </Request>
  <search>
    <query>
      <![CDATA[ Ender's Game ]]>
    </query>
    <results-start>1</results-start>
    <results-end>10</results-end>
    <total-results>100</total-results>
    <source>Goodreads</source>
    <query-time-seconds>0.10</query-time-seconds>        
  </search>
  ....
</GoodreadsResponse>

但是当我执行这段代码时,它会在浏览器中返回这样的

true 1 20 386 Goodreads 0.39 2422333 207 690938 33000 1985 4.28 375802 589 Orson Scott Card https://d.gr-assets.com/book ......

如何解决这个问题

在浏览器中使用时,对未渲染的视图显示源代码(右键单击->显示源代码)

<?php
$request = "";
$curl = curl_init("https://www.goodreads.com/search.xml?key=9ZzEFHzs9LwIdA3qt0fMw&q=Ender%27s+Game");
curl_setopt($curl, CURLOPT_VERBOSE, FALSE);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($curl, CURLOPT_POST, TRUE);
curl_setopt($curl, CURLOPT_POSTFIELDS, $request);
curl_setopt($curl, CURLOPT_HEADER, FALSE);
curl_setopt($curl, CURLOPT_HTTPHEADER, array("Content-Type: text/xml"));
curl_setopt($curl, CURLOPT_TIMEOUT, 0);
$response = curl_exec($curl);
echo "<pre>"; print_r($response); echo "</pre>";
curl_close($curl);

当我将这个URL粘贴到浏览器中时,将返回正确的XML。

https://www.goodreads.com/search.xml?key=9ZzEFHzs9LwIdA3qt0fMw& q =安德% 27 s +游戏

您的浏览器可能将XML显示为文本。查看页面的源代码,看看是否可以查看完整的XML响应。

你刚刚在这里粘贴了API密钥,让每个人都能看到。您可能想现在更改它,以避免其他人使用/滥用它。