Я хочу сделать простой запрос GET к другому сценарию на другом сервере. Как мне это сделать?
В одном случае мне просто нужно запросить внешний скрипт без необходимости вывода каких-либо данных.
make_request('http://www.externalsite.com/script1.php?variable=45'); //example usage
Во втором случае мне нужно получить текстовый вывод.
$output = make_request('http://www.externalsite.com/script2.php?variable=45');
echo $output; //string output
Честно говоря, я не хочу возиться с CURL, поскольку это не совсем работа CURL. Я также не хочу использовать http_get, поскольку у меня нет расширений PECL.
Будет ли работать fsockopen? Если да, то как мне это сделать, не читая содержимое файла? Нет другого выхода?
Спасибо всем
Обновить
Я должен был добавить, что в первом случае я не хочу ждать, пока скрипт ничего не вернет. Насколько я понимаю, file_get_contents () будет ждать полной загрузки страницы и т. Д.?
php
http
curl
asynchronous
Abs
источник
источник
Ответы:
file_get_contents
буду делать то, что ты хочешьИзменить: один из способов запустить запрос GET и немедленно вернуться.
Цитируется из http://petewarden.typepad.com/searchbrowser/2008/06/how-to-post-an.html
Это открывает сокет, запускает запрос на получение, немедленно закрывает сокет и возвращается.
источник
curl_post_async
и получать даже положительные голоса ...Вот как заставить ответ Маркиза работать как с запросами POST, так и с GET:
источник
ssl://hostname
вместо justhostname
.Что касается вашего обновления, о том, что вы не хотите ждать загрузки полной страницы - я думаю, что HTTP-
HEAD
запрос - это то, что вы ищете ...get_headers должен это сделать - я думаю, он запрашивает только заголовки, поэтому не будет отправлено полное содержимое страницы.
«PHP / Curl: HEAD Request занимает много времени на некоторых сайтах» описывает, как выполнить
HEAD
запрос с помощью PHP / Curl.Если вы хотите инициировать запрос и вообще не задерживать скрипт, есть несколько способов различной сложности.
"wget -O /dev/null $carefully_escaped_url"
- это будет зависеть от платформы, и вы должны быть очень осторожны с экранированием параметров в командеисточник
Вы этого не сделаете. Хотя PHP предлагает множество способов вызова URL-адреса, он не предлагает готовую поддержку для выполнения любого вида асинхронной / поточной обработки для каждого цикла запроса / выполнения. Любой способ отправки запроса на URL (или SQL заявление или т.п.) будет ждать какого - то ответа. Для этого вам понадобится какая-то вторичная система, работающая на локальном компьютере (поиск в Google "очередь заданий php")
источник
Я бы порекомендовал вам хорошо протестированную библиотеку PHP: curl-easy
источник
Если вы используете среду Linux, вы можете использовать команду PHP exec для вызова linux curl. Вот пример кода, который создаст асинхронный HTTP-пост.
Этот код не требует дополнительных PHP-библиотек, и он может завершить http-сообщение менее чем за 10 миллисекунд.
источник
источник
getstatus()
илиwaitSend()
илиwaitResult()
. Таким образом, вызывающий может получить полностью асинхронное поведение, вызвав цикл, чтобы проверить, есть ли результаты, и, если нет, продолжить выполнение любой другой задачи. Хм, теперь я хочу портироватьTask
с .net на php…Интересная проблема. Я предполагаю, что вы просто хотите запустить какой-то процесс или действие на другом сервере, но не заботитесь о результатах и хотите, чтобы ваш скрипт продолжался. Вероятно, в cURL есть что-то, что может сделать это, но вы можете рассмотреть возможность использования
exec()
для запуска другого скрипта на сервере, который выполняет вызов, если cURL не может этого сделать. (Обычно людям нужны результаты вызова сценария, поэтому я не уверен, может ли PHP просто запускать процесс.)exec()
Вы можете запуститьwget
сценарий PHP или даже другой сценарий, который выполняет запрос с помощьюfile_get_conents()
.источник
Вам лучше рассмотреть возможность использования очередей сообщений вместо рекомендуемых методов. Я уверен, что это будет лучшее решение, хотя для этого потребуется немного больше работы, чем просто отправка запроса.
источник
позволь мне показать тебе свой путь :)
требуется установка nodejs на сервере
(мой сервер отправляет 1000 запросов на получение https, занимает всего 2 секунды)
url.php:
urlscript.js>
источник
Для меня вопрос об асинхронном запросе GET возник из-за того, что я столкнулся с ситуацией, когда мне нужно выполнять сотни запросов , получать и обрабатывать данные результатов по каждому запросу, и каждый запрос занимает значительные миллисекунды, что приводит к минутам (!) полное выполнение с простыми
file_get_contents
.В данном случае это был очень полезный комментарий w_haigh на php.net к функции http://php.net/manual/en/function.curl-multi-init.php
Итак, вот моя обновленная и очищенная версия одновременного выполнения множества запросов. В моем случае это эквивалент «асинхронного» способа. Может кому поможет!
Его легко переписать для обработки POST или других типов HTTP (S) запросов или любых их комбинаций. И поддержка файлов cookie, перенаправления, http-auth и т. Д.
источник
Пытаться:
Это НЕ будет работать как модуль apache, вам нужно использовать CGI.
источник
Я нашел эту интересную ссылку для асинхронной обработки (получение запроса).
Askapache
Кроме того, вы можете выполнять асинхронную обработку с помощью очереди сообщений, например, beanstalkd.
источник
Вот адаптация принятого ответа для выполнения простого запроса GET.
Следует отметить, что если сервер выполняет перезапись URL-адреса, это не сработает. Вам понадобится более полнофункциональный http-клиент.
источник
Всего несколько исправлений в скриптах, опубликованных выше. Для меня работает следующее
источник
Кажется, никто не упоминает Guzzle , который является HTTP-клиентом PHP, который упрощает отправку HTTP-запросов. Может работать с ним или без него
Curl
. Он может отправлять как синхронные, так и асинхронные запросы.источник
Основываясь на этой теме, я сделал это для своего проекта codeigniter. Работает отлично. Вы можете обрабатывать любую функцию в фоновом режиме.
Контроллер, который принимает асинхронные вызовы.
И библиотека, которая выполняет асинхронные вызовы
Этот метод можно вызвать для обработки любой модели :: method () в «фоне». Он использует переменные аргументы.
источник
Предложение: отформатируйте FRAMESET HTML-страницу, которая содержит, скажем, 9 фреймов внутри. Каждый фрейм будет ПОЛУЧАТЬ отдельный «экземпляр» вашей страницы myapp.php. На веб-сервере параллельно будут выполняться 9 различных потоков.
источник
Для PHP5.5 + mpyw / co - лучшее решение. Он работает так, как будто это tj / co в JavaScript.
пример
Предположим, вы хотите загрузить указанные несколько аватарок пользователей GitHub. Для каждого пользователя требуются следующие шаги.
<img class="avatar" src="...">
и запросите (ПОЛУЧИТЬ ИЗОБРАЖЕНИЕ)---
: Жду своего ответа...
: Жду другого ответа в параллельных потокахМногие известные
curl_multi
скрипты на основе уже предоставляют нам следующие потоки.Однако этого недостаточно. Вы хотите сократить бесполезное время ожидания
...
?Да, с mpyw / co это очень просто. Для получения дополнительных сведений посетите страницу репозитория.
источник
Вот моя собственная функция PHP, когда я выполняю POST для определенного URL-адреса любой страницы ....
Пример: * использование моей функции ...
источник
Попробуйте этот код ....
Не забудьте включить расширение CURL php.
источник
CURLOPT_TIMEOUT_MS
например, 100 миллисекунд вместоCURLOPT_TIMEOUT
секунд и иметь минимум 1 секунду - для более быстрого выполнения.Это отлично работает для меня, к сожалению, вы не можете получить ответ на свой запрос:
Работает очень быстро, не нужны сокеты raw tcp :)
источник