Как сделать запрос cUrl без получения ответа? - PullRequest
9 голосов
/ 04 апреля 2011

Обычно я публикую данные, когда инициирую cURL. И я жду ответа, разбираю его и т.д ...

Я хочу просто опубликовать данные, а не ждать ответа. Другими словами, могу ли я отправить данные на URL через cURL и немедленно закрыть соединение? (не дожидаясь ответа или даже не выясняя, существует ли URL)

Это ненормально спрашивать, но я все равно спрашиваю.

Вот что у меня есть:

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $MyUrl);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_to_send); 
curl_exec($ch);  
curl_close($ch);

Ответы [ 3 ]

6 голосов
/ 04 апреля 2011

Я считаю, что единственный способ на самом деле не получить полный ответ с удаленного сервера - это использовать CURLOPT_WRITEFUNCTION. Например:

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $MyUrl);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_to_send); 
curl_setopt($ch, CURLOPT_WRITEFUNCTION, 'do_nothing');
curl_exec($ch);  
curl_close($ch);

function do_nothing($curl, $input) {
    return 0; // aborts transfer with an error
}

Важные замечания

  1. Имейте в виду, что это вызовет предупреждение, поскольку передача будет прервана.
  2. Убедитесь, что вы не установили значение CURLOPT_RETURNTRANSFER, так как это будет мешать обратному вызову записи.
6 голосов
/ 04 апреля 2011

Это можно сделать с помощью функций curl_multi_*, которые предназначены для одновременного выполнения нескольких запросов - просто отключите один запрос и не беспокойтесь о запросе ответа.

Не уверен, каковы будут последствия с точки зрения того, что произойдет, если скрипт завершится и curl все еще работает.

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $MyUrl);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_to_send); 
$mh = curl_multi_init();
curl_multi_add_handle($mh,$ch);
$running = 'idc';
curl_multi_exec($mh,$running); // asynchronous
// don't bother with the usual cleanup
0 голосов
/ 29 ноября 2015

Не уверен, поможет ли это, но через командную строку, я полагаю, вы могли бы использовать опцию --max-time - «Максимальное время в секундах, которое вы позволяете выполнить всю операцию».

Я должен был сделать что-то быстрое и грязное и не хотел перепрограммировать код или ждать ответа, поэтому нашел параметр --max-time в руководстве по curl

curl - max-time 1 URL

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...