Сообщение cURL не работает PHP

У меня возникли проблемы с использованием cURL для конкретной страницы.

Работает живой код: http://svgen.com/jupiter.php

Вот мой код:

$url = 'https://uspdigital.usp.br/jupiterweb/autenticar'; $data = array('codpes' => 'someLogin', 'senusu' => 'somePass', 'Submit' => '1'); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_COOKIEJAR, "FileHere"); curl_setopt($ch, CURLOPT_COOKIEFILE, "FileHere"); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_PROTOCOLS, CURLPROTO_HTTP); curl_exec($ch); curl_close($ch); 

Несмотря на то, что я использовал те же URL-адреса и почтовые данные, file_get_contents работал:

  $options = array('http' => array('method' => 'POST','content' => http_build_query($data))); $context = stream_context_create($options); $result = file_get_contents($url, false, $context); var_dump($result); 

Кто-то может мне помочь? Благодарю.

сделайте свои данные в виде:

 $data = array('codpes' => 'someLogin', 'senusu' => 'somePass', 'Submit' => '1'); $postData = ""; foreach( $data as $key => $val ) { $postData .=$key."=".$val."&"; } $postData = rtrim($postData, "&"); 

и изменение:

 curl_setopt($ch, CURLOPT_POSTFIELDS, $data); 

в

 curl_setopt($ch, CURLOPT_POSTFIELDS, $postData); 

Скорее всего, это проблема проверки SSL.

Добавить

 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); 

Также, если вы используете параметр CURLOPT_PROTOCOLS , это должен быть HTTPS, поскольку вы отправляете на безопасный URL-адрес

 curl_setopt($ch, CURLOPT_PROTOCOLS, CURLPROTO_HTTPS); // you currently have http 
 $data = array('codpes' => 'someLogin', 'senusu' => 'somePass', 'Submit' => '1'); 

должно было

 $data = http_build_query(array('codpes' => 'someLogin', 'senusu' => 'somePass', 'Submit' => '1')); 

Он автоматически url также кодирует вашу строку запроса и безопаснее, чем ручные методы.

Попробуйте эти:

 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); curl_setopt($ch, CURLOPT_CAINFO, '/etc/pki/tls/cert.pem'); // path is valid for RHEL/CentOS 

Это гарантирует, что ресурс, который вы «скручиваете», имеет действительный сертификат SSL. Не рекомендуется устанавливать для параметра «CURLOPT_SSL_VERIFYPEER» значение false (0).

Вы используете безопасное соединение, почему вы используете:

 curl_setopt($ch, CURLOPT_PROTOCOLS, CURLPROTO_HTTP); 

Используйте вместо этого:

 curl_setopt($ch, CURLOPT_PROTOCOLS, CURLPROTO_HTTPS);