2013-04-05 3 views
0

У меня есть следующие коды, однако он ничего не возвращает - пустую страницу. Но если я подключу нужные параметры и поместил всю ссылку в веб-браузере, это вернет результаты, которые я хочу. Я не хочу использовать file_get_contents, потому что мне нужно использовать эту функцию для других вызовов API, которые не могут возвращать результаты, введя всю ссылку в адресной строке. Спасибо за помощь.Использовать cURL для вызова API в PHP

<?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; 
?> 
+0

Проверка ошибок curl - exec() возвращает boolean FALSE при сбое: 'if ($ result === false) {curl_error ($ curl_handle); } ' –

ответ

0

Если вы поместили все в браузер и оно работает, вы используете данные GET. Поддерживает ли служба использование данных POST (что вы отправляете в своем примере)? Вы пытались отправить все данные через CURLOPT_URL?

Кроме того, вы хотите, чтобы изменить строку данных в

"xml=".$data_string 

и, возможно, вы и другие аргументы, а также (в зависимости от API).

0

По http://php.net/manual/en/function.curl-setopt.php:

Полные данные сообщения в операции HTTP "POST". Чтобы опубликовать файл, добавьте имя файла с @ и используйте полный путь. Тип файла может быть явно указан, следуя имени файла с типом в формате '; type = mimetype'. Этот параметр может быть передан как строка urlencoded, такая как 'para1 = val1 & para2 = val2 & ...' или как массив с имя поля в качестве ключа и данных поля как значение. Если значением является массив, то заголовок Content-Type будет установлен в multipart/form-data. Начиная с PHP 5.2.0, значение должно быть массивом, если файлы передаются этому параметру с префиксом @.

Поэтому вы должны изменить содержимое переменной $ data_string для соответствия требуемому формату.

Смежные вопросы