Форум программистов, компьютерный форум, киберфорум
Наши страницы
PHP
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
wolfalone
В экстазе
165 / 149 / 38
Регистрация: 05.08.2012
Сообщений: 754
Записей в блоге: 3
1

CURL, как отправить запрос и закрыть соединение

25.10.2017, 12:04. Просмотров 877. Ответов 10
Метки нет (Все метки)

Доброго времени суток уважаемые! Подскажите пожалуйста, как с помощью PHP/cURL - выполнить запрос и не дожидаясь ответа - просто закрыть соединение?

Немного подробностей:
Есть некоторая страница (url), которая грузится довольно долго... но результаты её загрузки - в общей сложности не интересуют, нужно просто отправить GET/POST запрос и не дожидаясь ответа - закрыть соединение.

Готов рассмотреть любые варианты, в т.ч. такие как запуск внешней программы для этих целей (если рассматривать этот вариант, - подскажите как правильно запустить внешнюю программу и не дожидаться её завершения?), но неплохо было бы это сделать с помощью встроенного в PHP cURL...

Буду признателен за любую информацию по теме.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.10.2017, 12:04
Ответы с готовыми решениями:

Curl не получается отправить заголовки
Всем привет! Опишу алгоритм действий: 1. Смотрю в отладчике, какие заголовки браузер посылает...

Отправить GET запрос через curl на ip адрес
Пробую отправить запрос на ip нужного сайта через curl. Вначале отправил через постман такой...

Как правильно Отправить http заголовок в php curl?
Здравствуйте, помогите пожалуйста переделать запрос из curl в php curl Если ввести этот запрос...

Не могу отправить curl
пишу в консоли фаербага. если отправить этот запрос то сайт считает что был переход по ссылке....

Отправить почту SMTP + Curl
Напишите пожалуйста код Curl для отправки письма через SMTP. Не обязательно рабочий (хотя если...

10
Jewbacabra
Эксперт PHP
3863 / 3183 / 1388
Регистрация: 24.04.2014
Сообщений: 9,677
25.10.2017, 12:18 2
Таймаут поменьше поставить
0
wolfalone
В экстазе
165 / 149 / 38
Регистрация: 05.08.2012
Сообщений: 754
Записей в блоге: 3
25.10.2017, 12:30  [ТС] 3
Цитата Сообщение от Jewbacabra Посмотреть сообщение
Таймаут поменьше поставить
Я думал над этим вариантом, но насколько я понимаю, таймаут ограничивает не время считывания ответа, а время работы curl-функции вообще. Гипотетически, допустимый придел ожидания "ответа" - 1 секунда (это то время, которое не значительно скажется на нервной системе пользователя ожидающего "неизвестно чего"). При этом, в отдельных случаях, запрос за 1 секунду может не успеть отправится... а если мы ограничим таймаут, насколько я понимаю - то и отправка запроса тоже прервётся.
0
Jewbacabra
Эксперт PHP
3863 / 3183 / 1388
Регистрация: 24.04.2014
Сообщений: 9,677
25.10.2017, 12:45 4
wolfalone, ну можно локально потестить как это будет работать. Можно асинхронно делать запрос. Еще можно реализовать демона, который будет принимать от скриптов запросы и выполнять их
0
25.10.2017, 12:45
wolfalone
В экстазе
165 / 149 / 38
Регистрация: 05.08.2012
Сообщений: 754
Записей в блоге: 3
25.10.2017, 12:53  [ТС] 5
Цитата Сообщение от Jewbacabra Посмотреть сообщение
ну можно локально потестить как это будет работать.
Локально к сожалению нельзя, т.к. я не знаю какая на конечном сервере будет ОС и т.д., его только готовят... а "там" оно может работать совсем не так, как локально... Но уже сейчас объективная проблема в том, что у нас парк из Windows/Linux/MacOS'ов и в Windows'ах не работает вариант "отвязать процесс от терминала".

Цитата Сообщение от Jewbacabra Посмотреть сообщение
Еще можно реализовать демона, который будет принимать от скриптов запросы и выполнять их
Над таким вариантом я тоже думал, но мне кажется это уже "из пушки по воробьям", вроде бы задача довольно банальная... а "нормального" решения я найти пока не могу...
0
Jewbacabra
Эксперт PHP
3863 / 3183 / 1388
Регистрация: 24.04.2014
Сообщений: 9,677
25.10.2017, 13:06 6
wolfalone, неважно что будет в итоге. Для тестов подойдет любой сервер который на любой запрос делает sleep(100000). Есть проблема как эмулировать долгое время подключения, но думаю есть способ. А вообще изначально решается некорректная задача: долгие процессы это не подход http. В таких случаях серверу следует отвечать 202 и передавать запрос обработчику
0
wolfalone
В экстазе
165 / 149 / 38
Регистрация: 05.08.2012
Сообщений: 754
Записей в блоге: 3
25.10.2017, 13:24  [ТС] 7
Цитата Сообщение от Jewbacabra Посмотреть сообщение
В таких случаях серверу следует отвечать 202 и передавать запрос обработчику
С этим тоже проблема, даже когда сервер возвращает "202" - cURL не перестаёт ожидать "чего-то"... и браузер кстати тоже (почему-то).
0
Jewbacabra
Эксперт PHP
3863 / 3183 / 1388
Регистрация: 24.04.2014
Сообщений: 9,677
25.10.2017, 13:45 8
wolfalone, отдавая 202 сервер не должен полностью обрабатывать запрос.
0
wolfalone
В экстазе
165 / 149 / 38
Регистрация: 05.08.2012
Сообщений: 754
Записей в блоге: 3
25.10.2017, 14:37  [ТС] 9
Jewbacabra, вот этот момент мне не понятен больше всего. То есть, я понимаю, что он "вытекает из контекста", но не понимаю почему... На википедии сказано следующее:
202 Accepted — запрос был принят на обработку, но она не завершена. Клиенту не обязательно дожидаться окончательной передачи сообщения, так как может быть начат очень долгий процесс. Появился в HTTP/1.0.
В нашем же случае формуляр "не обязательно" означает конкретно "должен". То есть, и браузер и cURL и т.д. - всё равно ждут ответа...

У меня есть вариант как решить эту проблему: создаём простейший socket/webosocket сервер, он же "демон", отправляем на него какой-то примитивный запрос и дальше всё по схеме... Но это "последний" вариант который я рассматриваю, т.к. он сопряжен с рядом не самых тривиальных (для задачи подобного уровня) операций. В частности придётся чем-то пожертвовать, либо плодить другие языки (т.к. PHP в формате "из коробки" по моему сугубо личному мнению не очень подходит для написания socket-серверов и в нем отсутствуют в базовой комплектации библиотеки для нормальной работы с потоками), либо - обвешивать PHP сторонними библиотеками (для работы с теми же потоками), что бы "демон" не уходил в "длительный аут" (переставая принимать соединения) на время обработки какой-то длительной задачи N.

Оба варианта мне не очень нравятся... Особенно в контексте того, что задача изначально, довольно примитивная, как мне кажется.
0
Jewbacabra
Эксперт PHP
3863 / 3183 / 1388
Регистрация: 24.04.2014
Сообщений: 9,677
25.10.2017, 15:17 10
wolfalone, определение 202 статуса из википедии несколько некорректно. 202 означает лишь факт принятия запроса, не факт что его обработка успешно завершится, и протокол http не позволяет никаким образом это установить в рамках данного запроса.
1
wolfalone
В экстазе
165 / 149 / 38
Регистрация: 05.08.2012
Сообщений: 754
Записей в блоге: 3
25.10.2017, 16:48  [ТС] 11
Jewbacabra, с последним - я примерно так и подумал (по факту происходящего), но, к сожалению, пока что это не спасает "отца российской демократии" ...
0
25.10.2017, 16:48
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.10.2017, 16:48

Как правильно сформировать запрос anti-captcha.com через curl?
Подскажите как правильно сформировать запрос https://api.anti-captcha.com/createTask из...

Как отправить запрос (vk oauth)
Я отправляю такой запрос: if (isset($_GET)) {...

Вапрос как в php отправить post запрос
Как в php отправить post запрос на страничку напримерь 1.ru/index.php


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru