0

我有以下代码,但是,它不返回任何内容 - 一个空白页。但是如果我插入正确的参数并将整个链接放在网络浏览器上,它会返回我想要的结果。我不想使用 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; 
?>
4

2 回答 2

0

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

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

"xml=".$data_string

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

于 2013-04-05T15:36:24.060 回答
0

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

在 HTTP“POST”操作中发布的完整数据。要发布文件,请在文件名前加上 @ 并使用完整路径。文件类型可以通过使用格式为“;type=mimetype”的文件名来明确指定。此参数可以作为 urlencoded 字符串(如 'para1=val1¶2=val2&...')或作为字段名称作为键和字段数据作为值的数组传递。如果 value 是一个数组,则 Content-Type 标头将设置为 multipart/form-data。从 PHP 5.2.0 开始,如果文件以 @ 前缀传递给此选项,则 value 必须是数组。

所以你应该修改你的 $data_string 变量内容以匹配所需的格式。

于 2013-04-05T15:37:03.663 回答