PHP cURL возвращает 400 на сервер

У меня есть несколько URL-адресов, которые выполняются через php curl, поэтому я могу получить HTTP-код. Самое смешное, что некоторые URL работают нормально и возвращают 200, но другие всегда возвращают 400. Проблема существует только тогда, когда я кормлю URL из базы данных, если я запустил ее путем жесткого кодирования, тогда он возвращает 200, как и должно.

Я пробовал urlencoding/decoding, и это не проблема. Это выглядит отлично. Одна странная вещь, которую я смог найти, заключается в том, что у 400 URL всегда есть [content_type] => text/html; charset=iso-8859-1 [content_type] => text/html; charset=iso-8859-1. URL-адрес также очень простой https://sometext.something.something/test и не имеет параметров

Здесь код PHP, с которым я запускал URL. Он отлично работает на моем локальном хосте, но на сервере он вызывает проблемы.

function checkStatus($url) { $urlencode=urlencode($url); foreach (explode('&', $urlencode) as $chunk) { $param = explode("=", $chunk); if ($param) { echo urldecode($param[0]); $ch = curl_init(urldecode($param[0])); } } //$ch = curl_init($urlencode); curl_setopt($ch, CURLOPT_NOBODY, true); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // curl_setopt($ch, CURLOPT_TIMEOUT, 10); // curl_setopt($ch, CURLINFO_CONTENT_TYPE, true); // curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type:text/html;charset=UTF-8')); curl_exec($ch); $returnCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); $error_report= curl_getinfo($ch); print_r($error_report); curl_close($ch); return $returnCode;
}

Вот пример сообщения об ошибке:

Array
( [url] => https://url.net/something [content_type] => text/html; charset=iso-8859-1 [http_code] => 400 [header_size] => 171 [request_size] => 83 [filetime] => -1 [ssl_verify_result] => 0 [redirect_count] => 0 [total_time] => 0.056926 [namelookup_time] => 0.003457 [connect_time] => 0.004276 [pretransfer_time] => 0.01614 [size_upload] => 0 [size_download] => 0 [speed_download] => 0 [speed_upload] => 0 [download_content_length] => -1 [upload_content_length] => 0 [starttransfer_time] => 0.056906 [redirect_time] => 0 [certinfo] => Array ( )
)
1 ответ

У вашего URL-адреса есть https:// то, почему он не работает для вас.

Если защита данных не является проблемой для вас, вы можете использовать следующую опцию для использования небезопасной связи для ssl.

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,false);

licensed under cc by-sa 3.0 with attribution.