curl PHP SSL 连接超时


curl php ssl connection timeout

我在互联网上找到了这个代码,我修改了它供我使用,我不确定我在这里做错了什么,我收到这个错误卷曲错误:SSL 连接超时登录部分成功,但搜索对我不起作用。有人可以帮我吗?

<?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);

?>

尝试添加这个(但不要在生产中设置此选项!

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_init($url); 重新启动 cURL。

使用我列出的 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
/

/...

?>

尝试其他答案后,我仍然收到SSL connection timeout错误。

我检查了我的php.ini,并决定检查是否有任何与OpenSSL相关的内容,我确实发现:

;extension=php_openssl.dll

我通过取消注释该行来启用它。

extension=php_openssl.dll

现在,启用OpenSSL(这是Windows上的参数,在Linux/Mac上应该类似),重新启动我的Apache服务器后,我终于可以执行我的cURL请求而没有任何错误了!