Я пытаюсь получить некоторые данные из веб-службы here (ботаническая таксономическая база данных). Сначала я попробовал со стороны клиента (Javascript/AJAX), но получал cross-domain restriction. Затем я переключился на сервер (PHP/cURL), но он не работает, мой сеанс падает во время запроса. Я следил за предложениями here, но все же он не работает.Не удается получить данные из API с помощью PHP + cURL
Что я делаю: я называю файл через AJAX, как
getMOBOT.php?genus=Ocotea&sp=guianensis
getMOBOT.php файла:
<?php
include_once '../../includes_pl/db_connect.php';
include_once '../../includes_pl/functions.php';
sec_session_start();
if (isset($_GET['genus'])) {
$genus = $_GET['genus'];
if (isset($_GET['sp'])) {
$sp = $_GET['sp'];
$curl = curl_init("http://services.tropicos.org/Name/Search?name=$genus+$sp&type=wildcard&apikey=[...]&format=xml");
$curl_response = curl_exec($curl); // error!
curl_close($curl);
echo "It works!";
}
}
?>
Я читал, что мне нужно, чтобы закрыть сессию (session_write_close()) перед попыткой curl_exec (где мой сеанс отключен) и повторно открыть его позже (session_start()), но:
1) У меня есть специальная функция для безопасных сеансов, называемая sec_session_start(). Независимо от того, использую ли я его или по умолчанию session_start() (после curl_exec), ни одна из них не работает.
2) Поскольку в этом файле нет необходимости использовать сеанс, я удалил две строки include_once, а также sec_session_start(). Все еще не работает, я просто получаю пустой ответ (HttpReq.readyState == 4, HttpReq.status! = 200 и HttpReq.statusText == '').
3) Если я нахожу URL-адрес в браузере, он работает, что означает, что мой ключ действителен (который я не могу показать здесь, он заменяется на [...]).
EDIT: Изменены "curl_exec" линия для:
if (!curl_exec($curl)) {
die('Erro: "' . curl_error($curl) . '" - Code: ' . curl_errno($curl));
} else {
echo "It works!";
}
, но до сих пор ничего не получают. Что я делаю неправильно, пожалуйста?
EDIT 2: Я за корпоративным прокси. Может быть, это (опять!) Проблема?