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.