2012-06-29 31 views
5

Tôi tìm thấy mã này trên internet và tôi đã sửa đổi nó để sử dụng, tôi không chắc mình đang làm gì sai ở đây, tôi gặp lỗi này Lỗi curl: Kết nối SSL timeout Phần đăng nhập thành công, nhưng tìm kiếm không hoạt động với tôi. ai đó có thể giúp tôi với nó được không?curl php ssl timeout kết nối

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


?> 
+0

Xin chào Craig, Bạn không chắc chắn cách thực hiện điều đó? –

+0

Bên cạnh câu trả lời đúng, bên dưới xếp hạng – craig1231

+0

Trên các câu hỏi khác của bạn, có dấu kiểm bên cạnh tất cả các câu trả lời. Kiểm tra một trong đó đã giải quyết hoặc hỗ trợ bạn trong việc giải quyết vấn đề. Nó quan trọng. –

Trả lời

4

Hãy thử thêm này (Nhưng đừng bỏ tùy chọn này thiết lập trong sản xuất!):

curl_setopt($curl_connection, CURLOPT_SSL_VERIFYPEER, false); 

Nếu nó hoạt động sau đó, đó là vì CURL là thất bại trong việc đàm phán các chứng chỉ SSL.

Thực hiện theo hướng dẫn này để biết các bước làm thế nào để có được cert CA: http://unitstep.net/blog/2009/05/05/using-curl-in-php-to-access-https-ssltls-protected-sites/

Cái gì khác để nhìn vào là, trước curl_exec của bạn(), curl_copy_handle(); và sau đó thiết lập các thông số bổ sung.

Ngoài ra, hoặc cách khác, bạn có thể khởi tạo lại cURL với curl_init($url);.

+0

nó được đặt thành false thực sự, tôi vừa kiểm tra nó. –

+0

bạn có Wireshark hoặc TCPDUmp không? Bạn có nhận được phản hồi trên 443 không? Hay nó bị treo trên TCP SYN? –

+0

Vì vậy, đăng nhập đang hoạt động, đó là curl_exec đầu tiên, nhưng sau đó curl_exec thứ hai dường như bị mắc kẹt –

0

Sử dụng 2 tùy chọn tôi liệt kê để tắt xác minh SSL tạm thời, rằng có thể là nó (nếu chứng chỉ không được thiết lập chính xác). Lưu ý tùy chọn "CURLOPT_SSL_VERIFYHOST". Nếu không tôi sẽ chỉ chơi với các tùy chọn hơn. Ngoài ra, bạn không phải lặp qua các giá trị đó, bạn chỉ có thể sử dụng một mảng kết hợp.

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

// ...

?> 
0

Sau khi thử các câu trả lời khác, tôi vẫn nhận được lỗi SSL connection timeout.

Tôi đã kiểm tra trong php.ini của tôi và quyết định để kiểm tra nếu có bất cứ điều gì liên quan đến OpenSSL, và tôi đã thấy rằng:

;extension=php_openssl.dll 

tôi kích hoạt nó bằng cách uncommenting dòng.

extension=php_openssl.dll 

Bây giờ, với OpenSSL kích hoạt (đây là thông số trên Windows, nó phải là tương tự trên Linux/Mac) và sau khi khởi động máy chủ Apache của tôi, tôi cuối cùng đã có thể thực hiện yêu cầu cURL của tôi mà không bất kỳ lỗi!

Các vấn đề liên quan