如何通过socks5 for PHP创建代理流?

时间:2016-08-21 23:18:33

标签: php proxy socks

我有这段代码:

$opt = array(
    'socks5' => array( 
        'proxy' => 'tcp://proxyIP:port', 
        'request_fulluri' => true,
    )
);

$stream = stream_context_create($opt);

if ($s = file_get_contents("http://yandex.ru/internet",FILE_USE_INCLUDE_PATH,$stream))
echo $s;

我认为它不起作用,因为获取网站显示我的IP而不是代理IP。

如果我将'http'代替'socks5',则可以使用代理IP。

在我的代理服务器中用于' http'我有port = 4000,对于' socks5' port = 5000

但我真的需要通过SOCKS5连接。我怎么能这样做?

1 个答案:

答案 0 :(得分:1)

我认为使stream_context_create()与socks5一起使用是不可能的。最好的解决方案是使用卷曲。根据您的需求的示例,更改$proxyIP$proxyPort

<?php

//$opt = array('socks5' => array( 
//                            'proxy' => 'tcp://proxyIP:port', 
//                            'request_fulluri' => true,
//                        )
//            );
//
//$stream = stream_context_create($opt);
//
//if ($s = file_get_contents("http://yandex.ru/internet",FILE_USE_INCLUDE_PATH,$stream))
//echo $s;

$url = 'https://yandex.ru/internet';
$proxyIP = '0.0.0.0';
$proxyPort = 0;
//$proxy_user = '';
//$proxy_pass = '';

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 3);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);
//curl_setopt($ch, CURLOPT_PROXYUSERPWD, "{$proxy_user}:{$proxy_pass}");
curl_setopt($ch, CURLOPT_PROXY, $proxyIP);
curl_setopt($ch, CURLOPT_PROXYPORT, $proxyPort);

$s = curl_exec($ch);
curl_close($ch);

if ($s) {
    echo $s;
}

如果您无法使用curl或想使用插槽,请阅读此https://stackoverflow.com/a/31010287/3904683答案