2013-03-01 4 views
4

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

Живой код рабочий: 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); 

Кто-то может помочь меня? Спасибо.

+0

Какую ошибку вы получаете? –

+0

Вы вернетесь? – uvinod

+0

Я не могу выполнить аутентификацию с помощью cURL –

ответ

5

сделать запись данных, как:

$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); 
+0

Это займет много времени, чтобы загрузить, но работал! –

+0

Этот ответ также является ошибкой в ​​вашем исходном коде. –

+0

Почему бы не использовать http_build_query() вместо этого? Проверьте мой ответ. – Zeeshan

7

Скорее всего, это проблема проверки 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 
+0

Не сработал .. –

+0

@ MaurícioGiordano Извините, что поставил 0 вместо false, моя ошибка –

+0

Все еще не работает .. –

1

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

curl_setopt($ch, CURLOPT_PROTOCOLS, CURLPROTO_HTTP); 

Использовать instea d:

curl_setopt($ch, CURLOPT_PROTOCOLS, CURLPROTO_HTTPS); 
+0

Он пробовал оба и не работал ... Примечание: file_get_contents используют HTTP вместо HTTPS и работает ... –

+0

Затем сохраните 'HTTPS', это одна ошибка меньше :-)' rotl' и 'file_get_contents' работают не так. –

3

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

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).

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

должен был

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

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

Смежные вопросы