做易语言桌面端软件时,代理IP常出现在公开数据采集、市场研究、价格监测这类需求里。程序自己发请求时,如果一直用本机出口,容易出现请求不稳定、返回结果不一致、IP地区不符合业务要求等情况。把代理写进程序里,可以让每个请求都从指定出口发出,也方便后续做配置管理。
先分清:系统代理和程序代理不是一回事
很多新手第一步会去系统设置里找代理,发现程序还是不走代理。原因是桌面端软件不一定读取系统代理。Windows 下有些程序会读系统代理,有些会直接连接,有些支持库会用自己的代理配置。做易语言项目时,建议优先做程序级代理,也就是把代理地址写进代码或配置文件,只影响当前软件。
| 类型 | 影响范围 | 适合场景 |
|---|---|---|
| 系统代理 | 整台电脑 | 临时测试、本机调试 |
| 程序代理 | 当前易语言程序 | 正式桌面端软件 |
| 配置读取 | 可动态调整 | 多地区、多出口 |
代理地址常见格式有两种:一种是“IP:端口”,另一种是“用户名:密码@IP:端口”。如果代理需要认证,把账号密码放在地址里即可。不要把账号密码写死在源码里,最好放到配置文件或登录设置里。
易语言接入HTTP代理的思路
易语言本身可以做网络请求,但不同支持库对代理的支持程度不一样。如果你的项目要稳定接入HTTP代理,建议直接调用 Windows 自带的网络接口。桌面端软件里,InternetOpen 这类接口比较适合:建立会话时传入代理地址,后续请求就会从代理出口发出。
整体思路可以拆成五步:
1. 声明系统网络接口;
2. 创建网络会话,并把代理地址传进去;
3. 打开目标地址;
4. 循环读取返回内容;
5. 关闭句柄,释放资源。
代码示例:声明常用网络接口
下面是易语言风格的声明示例。不同版本里函数名和参数名可以微调,核心是调用 Windows 网络接口。
.版本 2
.程序 易语言
.子程序 InternetOpen_, 整数型
.参数 lpszAgent, 文本型
.参数 dwReserved, 整数型
.参数 lpszProxy, 文本型
.参数 lpszProxyBypass, 文本型
.参数 dwFlags, 整数型
.DLL命令 "InternetOpen", "wininet.dll"
.子程序结束
.子程序 InternetOpenUrl_, 整数型
.参数 hInternet, 整数型
.参数 lpszURL, 文本型
.参数 lpszUserName, 文本型
.参数 dwReserved, 整数型
.参数 dwContext, 整数型
.参数 dwFlags, 整数型
.DLL命令 "InternetOpenUrl", "wininet.dll"
.子程序结束
.子程序 InternetReadFile_, 逻辑型
.参数 hFile, 整数型
.参数 lpBuffer, 字节集
.参数 dwNumberOfBytesToRead, 整数型
.参数 lpdwNumberOfBytesRead, 整数型, 参考
.DLL命令 "InternetReadFile", "wininet.dll"
.子程序结束
.子程序 InternetCloseHandle_, 逻辑型
.参数 hInternet, 整数型
.DLL命令 "InternetCloseHandle", "wininet.dll"
.子程序结束
完整示例:通过代理读取目标页面
这个示例适合桌面端软件:界面上放三个编辑框,分别填写代理地址、目标主机、路径。点击按钮后,程序通过代理发起请求,并把结果显示在多行编辑框里。
.子程序 _按钮_点击
.局部变量 hInternet, 整数型
.局部变量 hRequest, 整数型
.局部变量 代理地址, 文本型
.局部变量 目标主机, 文本型
.局部变量 路径, 文本型
.局部变量 完整地址, 文本型
.局部变量 返回文本, 文本型
.局部变量 数据, 字节集
.局部变量 实际读取, 整数型
.局部变量 循环次数, 整数型
代理地址 = 编辑框_代理.内容
目标主机 = 编辑框_主机.内容
路径 = 编辑框_路径.内容
如果 (代理地址 = "")
代理地址 = "127.0.0.1:8080"
结束如果
如果 (路径 = "")
路径 = "/"
结束如果
完整地址 = "http://" + 目标主机 + 路径
hInternet = InternetOpen_("神龙桌面采集器", 0, 代理地址, "", 0)
如果 (hInternet = 0)
信息框("代理会话创建失败", 0, "")
返回
结束如果
hRequest = InternetOpenUrl_(hInternet, 完整地址, "", 0, 0, 0, 0)
如果 (hRequest = 0)
信息框("打开目标地址失败", 0, "")
InternetCloseHandle_(hInternet)
返回
结束如果
重复循环
实际读取 = 0
数据 = 创建字节集(4096)
如果 (InternetReadFile_(hRequest, 数据, 4096, 实际读取))
如果 (实际读取 = 0)
跳出循环
结束如果
返回文本 = 返回文本 + 到文本(取字节集前n字节(数据, 实际读取))
否则
跳出循环
结束如果
循环次数 = 循环次数 + 1
如果 (循环次数 > 500)
跳出循环
结束如果
结束循环
多行编辑框_结果.内容 = 返回文本
InternetCloseHandle_(hRequest)
InternetCloseHandle_(hInternet)
.子程序结束
如果目标地址是 HTTPS,把完整地址里的协议改成 https 即可。正式项目里建议加上超时、重试和错误提示,避免程序长时间卡住。
把代理地址做成配置,而不是写死
桌面端软件上线后,代理地址经常要换。你可以把代理地址、账号、端口、地区标签保存到 ini 文件,或者放在登录后的设置页。启动时读取一次,请求前再校验一次。这样用户不用改代码,也能管理出口。
.局部变量 配置文件, 文本型
.局部变量 代理地址, 文本型
配置文件 = 取运行目录() + "proxy.ini"
代理地址 = 读ini文件(配置文件, "proxy", "addr", "")
如果 (代理地址 = "")
代理地址 = "127.0.0.1:8080"
结束如果
这样做的好处很明显:代码只负责读取和使用,代理信息可以单独维护。后续要接入不同地区的IP,也不需要重新编译程序。
什么时候适合用神龙HTTP
如果你的易语言桌面端软件只是临时测试,用本地代理就够了。但如果是公开数据采集、市场研究、价格监测,或者需要不同地区的IP,建议用稳定的代理IP服务。
神龙HTTP的短效动态IP适合桌面端软件定期获取新的IP,避免长期固定出口带来的不稳定问题。它的 API 兼容主流爬虫编程语言,可以配合易语言项目做出口管理,把“取IP、校验、写入配置”做成后台流程。可用率99.9%和300+城市级精准定位,也能覆盖需要不同地区IP的场景。
实际项目里,建议把代理获取做成独立模块:程序启动时先校验当前IP是否可用,不可用就通过API获取新的IP,再写回配置。这样桌面端软件既方便维护,也更容易做异常处理。
常见问题
Q: 易语言设置了代理,为什么请求还是失败?
A: 先检查代理地址是否带端口,再检查程序是否能到代理端口。很多失败不是代码问题,而是代理本身没启动、账号密码不对、端口被防火墙拦住。把错误信息按“会话、连接、请求、响应”四步拆开看,定位会快很多。
Q: HTTP代理和SOCKS5在易语言里怎么选择?
A: 如果你的目标请求是普通网页或接口,HTTP/HTTPS代理更直接。如果桌面端软件要同时处理多种协议,SOCKS5更通用。神龙HTTP支持HTTP/HTTPS/SOCKS5,按项目需要选一种即可。
Q: 桌面端软件要不要每个请求都获取新的IP?
A: 不一定。固定IP适合需要稳定出口、登录态、长期任务;动态IP适合需要分散出口、降低单IP压力、完成大规模采集。正式软件里,建议把“获取新的IP”做成后台任务,而不是每次点击按钮都临时取。
Q: 代理账号密码写在代码里安全吗?
A: 不建议。源码一旦泄露,账号密码也会泄露。可以把代理信息放到本地配置文件、加密存储或用户登录后的设置里,代码只负责读取和使用。





