#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
опцию, а также параметры ведения журнала для записи журнала в файл.