
先把边界讲清:Socket代理解决的是连接出口,不是业务逻辑
易语言里接入Socket代理,核心目标是让程序不直接连目标服务,而是先与代理网关建立连接,再由网关转发数据。它适用于获得授权的网络连通性测试、地区服务验证、内部系统访问等场景。代理不能替代目标服务授权,也不应用于绕过访问控制或平台安全机制。
实现前先确认服务商给的是HTTP(S)代理还是SOCKS5代理。两者握手格式不同:HTTP CONNECT 用文本请求建立隧道;SOCKS5 需要协商版本、认证方式、目标地址和端口。不要把主机端口直接填进Socket连接后就假定它能转发所有协议。

连接流程:先连代理,再声明目标地址
- 创建Socket,并连接代理主机与代理端口。
- 按代理协议发送认证信息;无认证、用户名密码认证的报文不同。
- 向代理声明要访问的目标域名或IP,以及目标端口。
- 读取代理返回结果,确认成功后再发送你的业务数据。
- 对连接超时、认证失败、目标不可达等结果分别记录与处理。
在易语言中,具体命令名称会随所用支持库或组件不同而变化,但顺序不能变。推荐先用浏览器或命令行工具验证相同参数,再把已验证的主机、端口和认证信息移入程序。
四个参数,决定能不能连通
| paramètres | sens caché | erreur commune |
|---|---|---|
| 主机 | 代理服务器域名或IP | 误填目标服务地址 |
| ports | 代理监听端口 | 协议和端口不匹配 |
| protocoles | HTTP CONNECT 或 SOCKS5 | 把HTTP报文发给SOCKS5端口 |
| accréditation | 用户名密码、白名单等 | 编码、账户格式或权限错误 |

SOCKS5握手示例:看懂数据包再写易语言逻辑
下面是SOCKS5用户名密码认证场景的伪代码,变量与发送函数需要按你的易语言Socket组件改写。示例仅展示协议顺序,不包含任何规避限制的逻辑。
连接 (代理主机, 代理端口)
发送字节集 (05 01 02) '声明 SOCKS5,支持用户名密码认证
读取并检查 (05 02)
发送认证包 (01 + 用户名长度 + 用户名 + 密码长度 + 密码)
读取并检查 (01 00)
发送连接包 (05 01 00 03 + 域名长度 + 域名 + 目标端口)
读取返回包
如果 返回码 = 00 则开始发送业务数据
若代理支持白名单认证,认证步骤可能不同;若目标用域名,建议让代理按域名建立连接,以便保留正确的解析与地区出口行为。处理返回码时不要只显示“连接失败”,至少区分认证失败、规则拒绝和目标不可达。
调试顺序比盲目改代码更重要
- 先用直连测试确认目标服务与业务报文本身没有问题。
- 使用同一代理参数做一个最简单的连通测试。
- 给每个阶段加超时与错误日志,记录代理响应字节或状态码。
- 一次只修改主机、端口、协议、认证中的一个变量。

ipipgo接入建议
ipipgo 支持HTTP(S)、SOCKS5和API接入。易语言Socket项目使用前,先在测试环境确认所购资源的协议、主机、端口与认证规则;需要不同地区出口时,应通过服务商提供的合法地区参数配置,并对连接日志和超时进行监控。

problèmes courants
Q:Socket连接成功但业务没响应,问题一定在代理吗?
不一定。还可能是目标协议、TLS、请求格式、认证或目标服务权限问题,应按阶段日志排查。
Q:HTTP代理和SOCKS5可以混用吗?
不可以直接混用。它们的握手和转发协议不同,必须按服务商提供的协议与端口实现。

