#php #curl
#php #curl
Вопрос:
Я сталкиваюсь с проблемой, для которой я нигде не могу найти решение. Что еще хуже, похоже, ни у кого больше нет этой проблемы, поэтому я, вероятно, делаю что-то очень глупое.
Некоторая справочная информация: я пытаюсь создать страницу, похожую на прокси, которая пересылает AJAX-запрос на другой сервер. Это для обхода политики того же домена. Все, что я хочу, чтобы этот код сделал, это взял переменные POST, переслал их на другую страницу, а затем вернул результаты. Это работает, но для 1 вещи: каждый раз, когда он ожидает продолжения тайм-аута. Я поставил его на 1 секунду, так что пока все в порядке, но я бы предпочел быстрый ответ и правильный тайм-аут.
Вот мой код:
// create a new cURL resource
$call = curl_init();
// set URL and other appropriate options
curl_setopt($call, CURLOPT_URL, $url);
curl_setopt($call, CURLOPT_POST, true);
curl_setopt($call, CURLOPT_POSTFIELDS, $params);
curl_setopt($call, CURLOPT_HEADER, false);
curl_setopt($call, CURLOPT_RETURNTRANSFER, true);
curl_setopt($call, CURLOPT_CONNECTTIMEOUT, 1);
// grab URL and pass it to the browser
$response = curl_exec($call);
// close cURL resource, and free up system resources
curl_close($call);
echo $response;
Я попытался отправить с ним заголовок «Соединение: закрыть» и несколько способов указать в целевом коде, что он выполнен (установка длины содержимого, очистка, die () и т.д.). На данный момент я действительно не знаю, что происходит, что меня больше всего удивляет, так это то, что я не могу найти никого с подобной проблемой.
Кто может мне помочь?
Комментарии:
1. Хм, странно, что вы описываете это как ожидание тайм-аута, тайм-аут должен быть максимальным значением. Как поведут себя приложения, если тайм-аут не указан (или если вы укажете 0 в качестве значения)?
2. Я еще не пробовал использовать 0 в качестве значения тайм-аута, но без указанного тайм-аута это занимает около 15 секунд, что, как я догадался, является каким-то значением по умолчанию.
Ответ №1:
Это имело бы смысл, если бы сервер фактически не выполнял запрос. Это ожидалось бы в сценарии потоковой передачи страницы или сервиса. Вы уверены, что сервер действительно возвращает полный HTTP-ответ на каждый запрос?
Комментарии:
1. Я так думаю, вызов страницы непосредственно из браузера не создает никаких проблем. Я посмотрю на это, хотя там может быть проблема.
Ответ №2:
Похоже, что он пытается подключиться, истекает время ожидания, и повторная попытка работает.
Это исправило это для меня:
curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
Я могу подключиться к командной строке через ipv6, поэтому я не знаю, почему это помогает.