帮助中心 代理使用 代理IP多语言接入实战:Go/Node.js/Java/PHP 代码配置一次搞定
代理IP多语言接入实战:Go/Node.js/Java/PHP 代码配置一次搞定
作者: 山水代理
发布时间: 2026-08-13 14:01:12
阅读量: 17 人次

四门主流语言接入代理IP,照着抄就行


拿到了代理IP却不知道怎么接入自己的代码?很多开发者熟悉Python的代理配置,但一换到Go、Node.js、Java、PHP就卡壳。其实主流语言的HTTP客户端都原生支持代理,只是写法不同:Go靠Transport、Node.js靠undici或agent、Java靠系统属性或OkHttp、PHP靠cURL。本文用真实可跑的代码示例,把四种语言的代理IP接入一次讲透,覆盖GET请求、带认证代理和常见坑,你照着改地址端口就能用。


一、Go:通过 Transport 配置代理


Go 的标准库 net/http 通过 Transport 的 Proxy 字段指定代理,支持用户名密码认证:

package main
import ( "fmt"; "net/http"; "net/url"; "io" )
func main() {
proxyURL, _ := url.Parse("http://user:pass@proxy.example.com:8888")
client := &http.Client{ Transport: &http.Transport{ Proxy: http.ProxyURL(proxyURL) } }
resp, _ := client.Get("https://example.com")
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}

要点:代理地址写在 url.Parse 里,支持 user:pass@ 形式;如果要为 HTTPS 目标走代理,把 Transport.Proxy 配好后即可同时作用于 HTTP 和 HTTPS 请求。注意高并发场景下应复用同一个 client 实例,避免反复创建连接。


二、Node.js:undici ProxyAgent 与 axios


Node.js 18+ 内置的全局 fetch 基于 undici,可搭配 ProxyAgent 走代理:

import { ProxyAgent } from 'undici'
const dispatcher = new ProxyAgent('http://user:pass@proxy.example.com:8888')
const res = await fetch('https://example.com', { dispatcher })
console.log(await res.text())

如果你用的是 axios,可以借助 https-proxy-agent:

import axios from 'axios'; import { HttpsProxyAgent } from 'https-proxy-agent'
const agent = new HttpsProxyAgent('http://user:pass@proxy.example.com:8888')
const { data } = await axios.get('https://example.com', { httpsAgent: agent })

要点:undici 的 ProxyAgent 也支持转发 HTTP 和 HTTPS 目标;axios 场景下把 agent 同时赋给 httpsAgent 和 httpAgent 可覆盖两类目标站。


三、Java:系统属性或 OkHttp


Java 最轻量的方式是通过系统属性全局设置,配合 Authenticator 处理认证:

System.setProperty("http.proxyHost", "proxy.example.com")
System.setProperty("http.proxyPort", "8888")
System.setProperty("https.proxyHost", "proxy.example.com")
Authenticator.setDefault(new Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("user", "pass".toCharArray()) }})

工程化项目更推荐 OkHttp,代理配置清晰且支持连接池:

import okhttp3.*
Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("proxy.example.com", 8888))
OkHttpClient client = new OkHttpClient.Builder().proxy(proxy).build()
Request req = new Request.Builder().url("https://example.com").build()

要点:OkHttp 走认证代理时需自定义 Authenticator 返回 Credentials.basic("user", "pass")。Java 的全局系统属性方式对项目内所有请求生效,注意避免影响其他模块。


四、PHP:cURL 一行搞定


PHP 最常用的是 cURL 扩展,代理配置非常直接:

$ch = curl_init()
curl_setopt($ch, CURLOPT_URL, "https://example.com")
curl_setopt($ch, CURLOPT_PROXY, "http://proxy.example.com:8888")
curl_setopt($ch, CURLOPT_PROXYUSERPWD, "user:pass")
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true)
$html = curl_exec($ch)
curl_close($ch)

要点:如果代理类型是 SOCKS5,把 CURLOPT_PROXY 的地址前缀改为 socks5:// 并设置 CURLOPT_PROXYTYPE。批量请求时记得设置合理的超时与重试,避免单次失败拖累整个任务。


五、多语言通用的代理接入最佳实践


不管用什么语言,接入代理IP都有几条通用的经验:

① 复用连接,别每次新建
Go 复用 Transport、Java 复用 OkHttpClient、Node.js 复用 agent,能显著降低握手开销。

② 做好超时与重试
代理链路比直连多一跳,超时、重试、熔断机制必不可少,避免单点失败拖垮任务。

③ 认证信息别硬编码
代理账号密码建议放到环境变量或配置中心,避免随代码泄露。

④ 先测通再上量
用单条请求验证连通性与响应速度,确认无误后再扩大并发。


总结


Go 靠 Transport、Node.js 靠 undici/agent、Java 靠系统属性或 OkHttp、PHP 靠 cURL——四种语言接入代理IP的路径各不相同,但思路一致:让 HTTP 客户端把请求交给代理转发。掌握这些基础写法,再结合连接复用、超时重试等最佳实践,就能在自己的技术栈里稳定跑通代理IP。
💡 延伸阅读:除了代码接入,代理IP的获取与API提取同样关键。本站文章《代理IP API提取与代码集成实战:从获取到使用的完整操作指南》讲解了从API拉取IP到接入代码的完整链路。
💡 延伸阅读:服务端之外,各操作系统和移动端的代理配置也是常见需求。本站文章《代理IP全平台配置速查手册:Windows/macOS/Linux/iOS/Android一站式指南》覆盖了端侧的完整配置方案。


关于山水代理


山水代理提供灵活的代理IP提取服务:私密代理 支持按时、按量、按流量计费,隧道代理 提供固定出口的按流量套餐,均支持HTTP/HTTPS/SOCKS5协议,可无缝接入 Go、Node.js、Java、PHP 等主流语言项目。
全国200+城市节点覆盖,每日更新50万+国内IP,可用率高达99%,延迟稳定。
山水代理 以最优惠的价格,最好的使用体验,服务于我们的用户(企业/个人)。
欢迎随时咨询,随时 免费试用

企业微信

客服在线时间:9:00~18:00

133-5988-7911

Copyright© 2022-2023 祈美科技(牡丹江)有限公司 黑ICP备2022000763号-1 beian 黑公网安备 23100002000084号

山水代理仅提供代理IP服务,用户使用山水代理从事的任何行为均不代表山水代理的意志和观点,与山水代理的立场无关。

严禁用户使用山水代理从事任何违法犯罪行为。产生的相关责任用户自负,对此山水代理不承担任何法律责任。官网上所有内容的最终解释权归本公司所有。

企微客服
山水代理微信客服 客服二维码 扫一扫添加
联系客服
山水代理客服电话 133-5988-7911