Что-то не так с моим скриптом CURL

#php #curl

#php #curl

Вопрос:

Я использую скрипт CURL, чтобы в основном воссоздать процесс, когда пользователь нажимает отправить в форме. Я бы хотел, чтобы все работало в фоновом режиме, но он никогда не отправляет при выполнении этого скрипта.

 $ch = curl_init();
curl_setopt($ch, CURLOPT_POST,1);
curl_setopt($ch, CURLOPT_POSTFIELDS,
    "amp;shopId=".$ID."amp;encodedMessage=".urlencode($encodedMessage)."amp;signature=".$signature);
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_USERAGENT, 
    "Mozilla/5.0 (Windows; U; Windows NT 5.1; rv:1.7.3) Gecko/20041001 Firefox/0.10.1" );
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);

$result = curl_exec($ch); 
  

Возможно, он не выполняется?

Комментарии:

1. Если curl не работает, вызов exec() вернет логическое значение. поэтому добавьте if ($result === FALSE) { die(curl_error($ch)); } после вызова exec. Это приведет к завершению работы скрипта и выведет последнюю ошибку curl.

Ответ №1:

Протестировано, работает отлично.

Вы правильно установили переменную $url ?

Комментарии:

1. Да, я его установил. это исполняющая часть? $result = curl_exec($ ch);

2. Это исполняемая часть. Вы всегда должны обрабатывать ошибки в реальном коде, поэтому проверьте, $result === false и также curl_geterrno($ch) . Вы могли бы найти полезную информацию в curl_getinfo($ch) , например, был ли результат 404 или что-то в этом роде. Вам также необходимо curl_close($ch) , как только вы закончите с этим, убедиться, что у вас не слишком много открытых сокетов.

3. Спасибо, Николас. Но если код отправляется нормально, то это не моя проблема. Похоже, что у программиста, который получает код, возникла проблема. Есть ли способ проверить, работает ли cURL на моем сервере?

4. Вы можете print $resu< после строки curl_exec(), если хотите проверить, что она возвращает.

Ответ №2:

curl не является хорошим вариантом для эмуляции fork.

Как только ваш текущий скрипт остановится, запрос curl будет прерван, и, вероятно, целевой URL также прекратит выполнение своего собственного скрипта.

вы могли бы использовать cron или аналогичный внешний процесс для выполнения запросов curl, и он выполнялся бы без прерываний. Также было бы полезно ставить параллельные запросы в очередь.