6

特定のページで 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); 

誰かが私を助けることができますか?ありがとう。

4

5 に答える 5

14

ほとんどの場合、SSL 検証の問題です。

追加

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

また、オプションを使用する場合は、安全な URL に投稿しているため、HTTPSCURLOPT_PROTOCOLSにする必要があります。

curl_setopt($ch, CURLOPT_PROTOCOLS, CURLPROTO_HTTPS);    // you currently have http
于 2013-03-01T06:21:41.697 に答える
6
$data = array('codpes' => 'someLogin', 'senusu' => 'somePass', 'Submit' => '1');

になるはずだった

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

クエリ文字列も自動的に URL エンコードし、手動の方法よりも安全です..

于 2015-08-09T09:34:50.383 に答える
6

投稿データを次のようにします。

$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);
于 2013-03-01T06:24:48.717 に答える
2

これらを試してください:

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) に設定することはお勧めしません。

于 2014-01-11T07:03:52.473 に答える
1

安全な接続を使用していますが、なぜ使用しているのですか :

curl_setopt($ch, CURLOPT_PROTOCOLS, CURLPROTO_HTTP);

代わりに使用してください:

curl_setopt($ch, CURLOPT_PROTOCOLS, CURLPROTO_HTTPS);
于 2013-03-01T06:24:13.393 に答える