准备

  • shadowsocks-libev
  • Laravel 项目
  • Guzzle

shadowsocks-libev 的相关内容我回另外发布一片博文来说明,敬请期待。

Laravel

Laravel 7.*

如果你是 Laravel 7.* 的版本的话,内部已经封装了 Guzzle,可以使用如下方式来实现:

use Illuminate\Support\Facades\Http;

$response = Http::withOptions([
    'proxy' => 'socks5h://127.0.0.1:1080',
    'timeout' => 30
])->get('ip.sb');

return $response->body();

通过 withOptions 方法来设置请求的代理,但是需要注意的是 proxy 的协议,socks5 和 socks5h 的区别是,socks5 会用本地的 DNS 解析来获取域名的 IP,会导致获取到错误的服务器 IP,所以建议使用 socks5h。

Laravel 7 之前的版本

composer require guzzlehttp/guzzle
use GuzzleHttp\Client;

$client = new Client();
$response = $client->get('ip.sb', [
    'proxy' => 'socks5h://127.0.0.1:1080',
    'timeout' => 30
]);

return $response->getBody()->getContents();

如果不出意外的话,响应中的内容就是你 Socks5 公网节点的IP。

I hope this is helpful, Happy hacking…