Laravel 中使用 Socks5 代理

Laravel 中使用 Socks5 代理

最近需要实现一个 Google 登录的功能,但是线上服务器无法访问 Google 的身份认证服务器,于是就想到了能不能在 HTTP Client 中使用 Socks5 代理。

准备

  • shadowsocks-libev
  • Laravel 项目
  • Guzzle

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

Laravel

Laravel 7.*

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

1
2
3
4
5
6
7
8
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 之前的版本

1
composer require guzzlehttp/guzzle
1
2
3
4
5
6
7
8
9
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。

评论