Curl, ожидающий до истечения времени ожидания, прежде чем продолжить

#php #curl

#php #curl

Вопрос:

Это код, который я выполняю.

Я попытался установить переменную тайм-аута на 30 секунд и 3 секунды. Код всегда выполняется, но где-то посередине он останавливается и ждет до истечения тайм-аута, прежде чем напечатать «OK».

     $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, "https://api.website.com/" . $settings["api_key"] . "/auth");
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Accept: application/json', 'Content-Type: application/json'));
    curl_setopt($ch, CURLOPT_POST, 4);
    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode(array("refID" => $row["id"], etc...)));
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_TIMEOUT, 3);
    
    $output = curl_exec($ch);
    curl_close($ch);
    echo "OK";
 

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

Я не знаю, связано ли это, но когда я делаю точно такой же запрос с библиотекой Java, я получаю этот возврат. Может быть, на PHP также влияет эта «ошибка» на удаленном сервере, и это причина? Если да, могу ли я как-то избежать этой ошибки?

 dec 04, 2020 10:48:54 EM org.apache.http.client.protocol.ResponseProcessCookies processCookies
WARNING: Invalid cookie header: "Set-Cookie: AWSALB=hSCo...; Expires=Fri, 11 Dec 2020 21:48:54 GMT; Path=/". Invalid 'expires' attribute: Fri, 11 Dec 2020 21:48:54 GMT
dec 04, 2020 10:48:54 EM org.apache.http.client.protocol.ResponseProcessCookies processCookies
WARNING: Invalid cookie header: "Set-Cookie: AWSALBCORS=hSCo...; Expires=Fri, 11 Dec 2020 21:48:54 GMT; Path=/; SameSite=None; Secure". Invalid 'expires' attribute: Fri, 11 Dec 2020 21:48:54 GMT
 

Любая помощь будет оценена!

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

1. Похоже, что сервер отправляет ответ, но после этого не закрывает соединение.

2. Спасибо, я попрошу разработчиков сервиса, если они закроют свое соединение.

Ответ №1:

После вызова curl_exec проверки ошибок. Это может помочь выяснить, что происходит.

 if(curl_exec($ch) === false) {
    echo 'curl error: ' . curl_error($ch);
}
 

Также рекомендуется установить эти параметры CURLOPT_SSL_VERIFYHOST
CURLOPT_SSL_VERIFYPEER и CURLOPT_SSL_VERIFYSTATUS false отключить проверку сертификата.

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

1. Спасибо. Однако ошибка не возникает, она ничего не печатает.

2. Таким образом, похоже, что curl завершает работу без ошибок и что-то не так с сервером. Попробуйте использовать CURLOPT_VERBOSE опцию, а также параметры ведения журнала для записи журнала в файл.