сессия — не удается получить данные из API с использованием PHP + cURL

Я пытаюсь получить некоторые данные из веб-службы Вот (ботаническая таксономическая база данных). Сначала я попробовал со стороны клиента (Javascript / AJAX), но получал междоменное ограничение. Затем я переключился на серверную сторону (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-адрес в браузере, он работает, что означает, что мой ключ действителен (что я не могу показать здесь, он заменяется […]).

РЕДАКТИРОВАТЬ: изменил строку «curl_exec» для:

if (!curl_exec($curl)) {
die('Erro: "' . curl_error($curl) . '" - Code: ' . curl_errno($curl));
} else {
echo "It works!";
}

но все равно ничего не получите. Что я делаю не так, пожалуйста?

РЕДАКТИРОВАТЬ 2: я за корпоративный прокси. Может быть, это (опять!) Проблема?

0

Решение

Да, это был прокси (снова)!

Мне нужно было только добавить

$proxy = 'address:port';
$proxyauth = 'user:password';
curl_setopt($curl, CURLOPT_PROXY, $proxy);
curl_setopt($curl, CURLOPT_PROXYUSERPWD, $proxyauth);

в нужных местах.

0

Другие решения

Других решений пока нет …