5

インターネットでこのコードを見つけ、使用するために修正しました。ここで何が間違っているのかわかりません。このエラーが発生しています Curl error: SSL connection timeout ログイン部分は成功しましたが、検索は失敗しました私と一緒に働いていません。誰かが私を助けてくれますか?

<?php
//create array of data to be posted
$post_data['username'] = 'user';
$post_data['password'] = 'log';
$post_data['cmd'] = 'log';

//create array of data to be posted
foreach ( $post_data as $key => $value) {
    $post_items[] = $key . '=' . $value;
}
//create the final string to be posted using implode()
$post_string = implode ('&', $post_items);
//create cURL connection
$curl_connection =
  curl_init('https://sie.com');
//set options
///curl_setopt($curl_connection, CURLOPT_CONNECTTIMEOUT, 3990);

curl_setopt($curl_connection, CURLOPT_USERAGENT,
  "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)");

curl_setopt($curl_connection, CURLOPT_HTTPHEADER, array(
    'Connection: Keep-Alive',
    'Keep-Alive: 300'
));

curl_setopt($curl_connection, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl_connection, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl_connection, CURLOPT_FOLLOWLOCATION, 1);
//set data to be posted
curl_setopt($curl_connection, CURLOPT_POSTFIELDS, $post_string);
//perform our request
$result = curl_exec($curl_connection);
//show information regarding the request

//print_r(curl_getinfo($curl_connection));
//echo curl_errno($curl_connection) . '-' .
  //              curl_error($curl_connection);
//close the connection
//curl_close($curl_connection);


echo $result."\n";


$post_data1['cmd'] = 'Viewr';
$post_data1['search'] = 'test';



foreach ( $post_data1 as $key => $value1) {
    $post_items1[] = $key . '=' . $value1;
}
$post_string1 = implode ('&', $post_items1);
echo $post_string1."\n";
curl_setopt($curl_connection, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($curl_connection, CURLOPT_USERAGENT,
  "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)");
curl_setopt($curl_connection, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl_connection, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl_connection, CURLOPT_FOLLOWLOCATION, 1);
//set data to be posted
curl_setopt($curl_connection, CURLOPT_POSTFIELDS, $post_string);
//perform our request
$result1 = curl_exec($curl_connection);
//show information regarding the request
//$result1 =1;
//close the connection
//curl_close($curl_connection);
if ($result1)
echo "ok \n\n";
else
echo "nok\n";
if(curl_errno($curl_connection))
{
    echo 'Curl error: ' . curl_error($curl_connection)."\n";
}
echo($post_string1);
echo $result1."\n";


curl_close($curl_connection);


?>
4

3 に答える 3

5

これを追加してみてください(ただし、このオプションを本番環境に残さないでください!) :

curl_setopt($curl_connection, CURLOPT_SSL_VERIFYPEER, false);

その後動作する場合は、CURL が SSL 証明書のネゴシエーションに失敗しているためです。

CA 証明書を取得する手順については、次のチュートリアルに従ってください: http://unitstep.net/blog/2009/05/05/using-curl-in-php-to-access-https-ssltls-protected-sites/

他に調べる必要があるのは、curl_exec() のcurl_copy_handle();で、追加のパラメーターを設定することです。

さらに、または代わりに、で cURL を再度開始することもできますcurl_init($url);

于 2012-06-29T18:48:13.260 に答える
0

他の回答を試した後も、まだSSL connection timeoutエラーが発生していました。

私はチェックインし、php.iniOpenSSL に関連するものがあるかどうかを確認することにしました。

;extension=php_openssl.dll

行のコメントを外して有効にしました。

extension=php_openssl.dll

これで、OpenSSL が有効になり (これは Windows のパラメーターであり、Linux/Mac でも同様のはずです)、Apache サーバーを再起動した後、最終的にエラーなしで cURL 要求を実行できます!

于 2012-11-14T05:05:01.040 に答える
0

リストした 2 つのオプションを使用して、SSL 検証を一時的に無効にします。「CURLOPT_SSL_VERIFYHOST」オプションに注意してください。それ以外の場合は、オプションをもっといじるだけです。また、これらの値をループする必要はありません。連想配列を使用するだけです。

<?php
//create array of data to be posted
$post_data['username'] = 'user';
$post_data['password'] = 'log';
$post_data['cmd'] = 'log';

//create cURL connection
$curl_connection = curl_init();
//set options
curl_setopt($curl_connection,CURLOPT_SSL_VERIFYHOST,0);
curl_setopt($curl_connection,CURLOPT_SSL_VERIFYPEER, false);

//...

curl_setopt($curl_connection, CURLOPT_POSTFIELDS, $post_data);//it can accept associative arrays

//...

?>
于 2012-06-29T18:54:10.800 に答える