浏览器发送 Cookie 的方式是:在 HTTP 请求头中添加一个名为 Cookie 的字段,其值就是你想要发送的键值对字符串。

(图片来源网络,侵删)
下面我将为你详细介绍三种主流且有效的方法,从简单到专业,并附上完整代码示例。
使用 网页访问 命令(最简单,适合初学者)
这是最直接的方法,但有一个关键点:易语言的 网页访问 命令本身不会自动保存或发送服务器返回的 Cookie,如果你想提交一个你手动构造的 Cookie,可以直接在 Cookie 参数中填写。
适用场景:
- 你已经知道了需要提交的 Cookie 内容(从某个地方复制过来的)。
- 你不需要关心服务器如何设置和更新这个 Cookie。
核心步骤:

(图片来源网络,侵删)
- 使用
网页访问命令。 - 在
Cookie参数中,直接填写你构造好的 Cookie 字符串。 - Cookie 的格式是
键1=值1; 键2=值2; ...。
代码示例:
.版本 2
.程序集 程序集1
.子程序 _启动子, , 公开
.局部变量 html, 文本型
.局部变量 url, 文本型
.局部变量 post_data, 文本型
.局部变量 my_cookie, 文本型
' --- 1. 准备要访问的URL ---
url = “http://httpbin.org/cookies” ' 这是一个可以测试Cookie的网站
' --- 2. 准备要提交的Cookie ---
' 注意格式:多个键值对用分号 ; 隔开
my_cookie = “username=易语言爱好者; session_id=123456789; theme=dark”
' --- 3. 准备POST数据(可选,这个例子只是演示) ---
post_data = “key1=value1&key2=value2”
' --- 4. 使用网页访问命令提交Cookie ---
' 注意:这里的关键是“Cookie”参数
html = 网页访问 (url, post_data, , , , , my_cookie, , , )
' --- 5. 显示结果 ---
信息框 (“网页返回的HTML内容:” + #换行 + html, 0, , )
' 你会发现返回的JSON中,“cookies”部分正好是我们发送的my_cookie内容
' {"cookies":{"session_id":"123456789","theme":"dark","username":"易语言爱好者"}}
.结束 子程序
使用 网页组件 控件(推荐,能自动处理会话)
这是最常用且最强大的方法,因为它可以自动处理 Cookie 的会话,当你通过 网页组件 访问网页时,它会像浏览器一样自动接收、保存并后续发送相关的 Cookie。
适用场景:
- 需要登录的网站(登录后,服务器会返回一个 Session Cookie,后续所有请求都必须带上这个 Cookie 才能保持登录状态)。
- 任何需要维护用户状态的网站交互。
核心步骤:

(图片来源网络,侵删)
- 在窗口上放置一个
网页组件控件(通常命名为web_浏览器1)。 - 使用
网页_访问命令让这个控件去访问目标网址。 - 关键:当
网页_访问事件返回2(完成) 时,表示页面加载完成,浏览器控件已经自动处理了所有 Cookie。 - 当你需要向同一个网站的其他页面发送请求时,继续使用同一个
网页组件控件(使用网页_执行脚本来获取页面数据,或者使用网页_访问访问同站下的其他URL),它会自动带上之前保存的 Cookie。
代码示例:
.版本 2
.程序集 程序集1
.子程序 _启动子, , 公开
' 窗口上需要有一个名为“web_浏览器1”的网页组件
web_浏览器1.地址 = “http://httpbin.org/cookies/set?user_id=10086&token=hello_e”
' 这个URL会设置一个Cookie并显示出来
.结束 子程序
.子程序 web_浏览器1_访问, , 公开
.参数 返回值, 整数型
.参数 地址, 文本型
.参数 状态, 整数型
' 当网页加载完成 (返回值为2) 时
返回值 = 2
' web_浏览器1 已经自动接收并保存了 "user_id=10086" 和 "token=hello_e" 这两个Cookie
' 现在我们访问另一个需要Cookie的页面,看看是否会自动带上
web_浏览器1.地址 = “http://httpbin.org/cookies”
' 你会发现第二个页面返回的JSON中包含了第一个页面设置的Cookie
' {"cookies":{"token":"hello_e","user_id":"10086"}}
否则
' 可以在这里显示加载进度
信息框 (“正在加载: ” + 地址, 0, , )
结束如果
.结束 子程序
使用 wininet API(最专业,适合无界面程序)
如果你的程序不需要显示界面(一个后台服务、爬虫程序),使用 wininet API 是最高效的选择,它提供了底层的网络访问功能,可以完全控制 HTTP 请求,包括 Cookie。
适用场景:
- 无界面的后台程序。
- 需要精细控制 HTTP 请求头、请求体等。
- 对性能要求较高的场景。
核心步骤:
- 声明
wininet相关的 API 函数。 - 使用
InternetOpen初始化会话。 - 使用
InternetConnect连接到服务器。 - 使用
HttpOpenRequest打开一个 HTTP 请求。 - 关键:使用
HttpAddRequestHeaders来手动添加Cookie请求头。 - 使用
HttpSendRequest发送请求。 - 读取响应数据。
- 用
InternetCloseHandle关闭所有句柄。
代码示例: 这个例子比较复杂,因为它涉及到多个 API 的调用和资源管理。
.版本 2
.程序集 程序集1
.程序集变量 hInternet, 整数型
.程序集变量 hConnect, 整数型
.程序集变量 hRequest, 整数型
.子程序 _启动子, , 公开
.局部变量 my_cookie, 文本型
.局部变量 html, 文本型
.局部变量 url, 文本型
url = “http://httpbin.org/cookies”
my_cookie = “custom_id=wininet_api_test; level=admin”
' --- 1. 初始化 ---
hInternet = InternetOpen (“MyApp/1.0”, 1, , , 0)
hInternet = 0 则
信息框 (“InternetOpen 失败!”, 16, , )
返回 ()
结束如果
' --- 2. 连接服务器 ---
hConnect = InternetConnect (hInternet, “httpbin.org”, 80, , , 1, 0, 0)
hConnect = 0 则
信息框 (“InternetConnect 失败!”, 16, , )
资源释放 ()
返回 ()
结束如果
' --- 3. 打开请求 ---
hRequest = HttpOpenRequest (hConnect, “POST”, “/cookies”, , , , , 0)
hRequest = 0 则
信息框 (“HttpOpenRequest 失败!”, 16, , )
资源释放 ()
返回 ()
结束如果
' --- 4. 添加自定义Cookie请求头 ---
HttpAddRequestHeaders (hRequest, “Cookie: ” + my_cookie, -1, 20) ' 20 表示添加或替换
' --- 5. 发送请求 ---
HttpSendRequest (hRequest, , 0, , 0)
' --- 6. 读取响应 ---
html = 读取网页响应 (hRequest)
' --- 7. 显示结果 ---
信息框 (“网页返回的HTML内容:” + #换行 + html, 0, , )
' --- 8. 释放资源 ---
资源释放 ()
.结束 子程序
.子程序 资源释放
hRequest ≠ 0 则
InternetCloseHandle (hRequest)
hRequest = 0
结束如果
hConnect ≠ 0 则
InternetCloseHandle (hConnect)
hConnect = 0
结束如果
If hInternet ≠ 0 Then
InternetCloseHandle (hInternet)
hInternet = 0
End If
.结束 子程序
.子程序 读取网页响应, 文本型, 公开
.参数 hRequest, 整数型
.局部变量 buffer, 字节集, 1024
.局部变量 bytesRead, 整数型
.局部变量 result, 文本型
判断循环首 (InternetReadFile (hRequest, buffer, 1024, bytesRead))
bytesRead = 0 则
跳出循环 ()
否则
result = result @ 到文本 (buffer, , , bytesRead)
结束如果
判断循环尾 ()
返回 (result)
.结束 子程序
注意:使用 wininet API 需要在你的易语言环境中正确声明这些函数,并且通常需要加载 wininet.dll,上面的代码是核心逻辑,你可能需要根据你的易语言版本和环境进行调整。
总结与对比
| 方法 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| 网页访问 | 代码最简单,一行代码搞定。 | 无法自动处理会话Cookie,只能手动提交固定的。 | 测试、提交已知静态Cookie的简单请求。 |
| 网页组件 | 最推荐,能自动处理会话,逻辑符合浏览器行为,支持JavaScript。 | 需要窗口和控件,不适合无界面程序。 | 绝大多数需要登录或交互的网页程序。 |
| wininet API | 性能高,完全控制,适合无界面后台程序。 | 代码复杂,需要处理API声明和资源释放,不支持JavaScript。 | 爬虫、后台服务、对性能有要求的自动化任务。 |
对于绝大多数易语言开发者来说,方法二(使用 网页组件)是最佳选择,因为它简单、可靠且功能强大。
