带有https请求的file_get_contents通过代理

时间:2015-07-26 07:14:46

标签: php https proxy fsockopen

如何通过代理服务器执行HTTPS请求

代理服务器在debian上是tinyproxy

$context = stream_context_create([
    'http' => [
        'proxy' => 'tcp://xx.xx.xx.xx:8888',
        'request_fulluri' => true
    ]
]);

echo file_get_contents('https://www.google.com', false, $context);

错误

Warning: file_get_contents(): SSL operation failed with code 1. OpenSSL Error messages: error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol in C:\wamp\www\google\test.php on line 10

Warning: file_get_contents(https://www.google.com): failed to open stream: Cannot connect to HTTPS server through proxy in C:\wamp\www\google\test.php on line 10

2 个答案:

答案 0 :(得分:1)

我建议cURL这样做。在stackoverflow的某个地方,用户说了这个,我完全同意。

  

file_get_contents()是一个简单的螺丝刀。非常适合简单的GET   请求头,HTTP请求方法,超时,cookiejar,   重定向,和其他重要的事情无关紧要。 cURL with setopt   是一个几乎所有你能想到的选择的powerdrills。

<?php

$url = 'https://www.google.com';
// to check your proxy
// $url = 'http://whatismyipaddress.com/';
$proxy = '50.115.194.97:8080';

// create curl resource
$ch = curl_init();

// set options
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_PROXY, $proxy);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // read more about HTTPS http://stackoverflow.com/questions/31162706/how-to-scrape-a-ssl-or-https-url/31164409#31164409
curl_setopt($ch, CURLOPT_USERAGENT,'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13');

// $output contains the output string
$output = curl_exec($ch);

// close curl resource to free up system resources
curl_close($ch); 

echo $output;

?>

答案 1 :(得分:1)

可以通过将stream_context_create中的“http”更改为“https”来修复导致第二次警告的问题