使用cURL在PHP中调用API

时间:2013-04-05 15:32:12

标签: php xml

我有以下代码,但是,它没有返回任何内容 - 一个空白页面。但是,如果我插入正确的参数并将整个链接放在Web浏览器上,它将返回我想要的结果。我不想使用file_get_contents,因为我需要将此函数用于其他API调用,这些调用无法通过输入地址栏上的整个链接返回结果。谢谢你的帮助。

<?php
$data_string ='<HotelListRequest><hotelId>A HOTEL</hotelId></HotelListRequest>';

// Tell CURL the URL of the recipient script
$curl_handle = curl_init ();
curl_setopt ($curl_handle, CURLOPT_URL, 'http://api.ean.com/ean-services/rs/hotel/v3/info?minorRev=4&cid=MYID&apiKey=MYAPIKEY&customerSessionId=&locale=en_US&currencyCode=USD&xml=');

// This section sets various options. See http://www.php.net/manual/en/function.curl-setopt.php
curl_setopt ($curl_handle, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt ($curl_handle, CURLOPT_RETURNTRANSFER, true);
curl_setopt ($curl_handle, CURLOPT_POST, true);
curl_setopt ($curl_handle, CURLOPT_POSTFIELDS, $data_string);

// Perform the POST and get the data returned by the server.
$result = curl_exec ($curl_handle);
// Close the CURL handle
curl_close ($curl_handle);
echo $result; 
?>

2 个答案:

答案 0 :(得分:0)

如果您将所有内容放入浏览器并且它可以正常工作,那么您就是在使用GET数据。该服务是否支持使用POST数据(这是您在示例中发送的内容)?您是否尝试通过CURLOPT_URL发送所有数据?

此外,您还需要将数据字符串更改为

"xml=".$data_string

也可能是其他参数(取决于API)。

答案 1 :(得分:0)

根据http://php.net/manual/en/function.curl-setopt.php

  

要在HTTP“POST”操作中发布的完整数据。要发布文件,   使用@预先添加文件名并使用完整路径。文件类型可以是   通过跟随文件名中的类型明确指定   format'; type = mimetype'。此参数可以作为a传递   urlencoded字符串,如'para1 = val1&amp; para2 = val2&amp; ...'或作为数组   字段名称为键,字段数据为值。如果value是一个数组,   Content-Type标头将设置为multipart / form-data。截至PHP   5.2.0,如果使用@前缀将文件传递给此选项,则value必须是数组。

因此,您应该修改$ data_string变量内容以匹配所需的格式。