HttpClient简介
HttpClient原本属于《高级开发指南》的内容,但随着WebViewer的引入、AI服务的涌现,以及越来越多公共服务以网络API形式提供,所以有必要在常规文档中单独介绍HttpClient。
Foxtable早期是基于.NET Framework 2.0开发的,那时.NET
Framework还没有内置HttpClient类,所以Foxtable官方自行开发了一个。
尽管现在.NET
Framework已内置了HttpClient类,但Foxtable的HttpClient依然有存在的价值,因为其天然有Foxtable的基因:使用简单。
有关HttpClient的详细用法,可参考《高级开发指南》,本文档仅做基础介绍。
HttpClient的属性有:
| 属性 | 说明 |
| Content | 字符型,用于设置要发送到服务器的数据 |
| ContentType | 字符型,用于设置数据类型,默认为"text/plain",一般无需设置。 |
| FormData | 字典,用于添加需要发送到服务器的表单数据 |
| sCookies | 字典,用于添加需要发送到服务器的Cookie |
| rCookies | 字典,包括所有服务器返回的Cookies |
| Files | 字典,包括所有需要发送到服务器的文件 |
| Method | 字符型,用于设置请求方式,通常无需设置,由HttpClient根据提交的内容自行决定。 |
| TimeOut | 整数型,用于设置获取服务器响应的超时时限,单位为秒,默认是100秒。 |
| Headers | 字典,用于添加HTTP头 |
| UserAgent | 获取或设置 User-agent HTTP 标头的值。 |
| Accept | 获取或设置 Accept 标头的值。 |
| ReadWriteTimeout | 整数型,用于获取读写服务器数据的超时时限,单位为秒,默认是300秒。 |
| RequestEncoding | 字符型,用于设置向服务器发送数据时所使用的字符编码,默认为"utf-8",一般无需设置。 |
| ResponseEncoding | 字符型,用于设置解析收到的服务器数据时所采用的字符编码,默认为"utf-8",一般无需设置。 |
| LastModified | 获取服务器返回内容的最近一次更新时间,参考 |
| StatusCode | 获取服务器返回的状态码 |
| StatusDescription | 获取服务器返回的状态字符串 |
| ResponseContentType | 获取服务器返回内容的类型 |
| ResponseContentLength | 获取服务器返回内容的长度 |
| ResponseHeaders | 获取服务器返回内容的头部信息 |
| EncodeCookie | 逻辑型,用于设置Cookie是否编码发送,默认为True,如果需要原文发送Cookie,可将此属性设置为False |
| SkipError | 逻辑型,是否跳过错误提示 |
HttpClient的方法有:
| 方法 | 说明 |
| GetData | 用于接收从服务器返回的数据 |
| GetDataAsync | 用于异步接收从服务器返回的数据,支持Await |
| GetFile | 用于接收从服务器返回的文件 |
| GetFileAsync | 用于异步接收从服务器返回的文件,支持Await |
| ReadOpenAiSseAsync | 用于接收符合OpenAI规范的大模型AI接口的SSE流式输出内容 |
| Clone | 用于克隆HttpClient,HttpClient是不能复用的,如果要再次执行,或者用类似的设置执行另一个任务,可以用此方法克隆一个新的HttpClinet |
下面的示例基于下面的域名,该域名提供了很多免费的接口测试:
https://free.mockerapi.com
所有测试代码均可直接在命令窗口运行:
1、接收数据
Dim
hc
As
New
HttpClient("https://free.mockerapi.com/get")
hc.TimeOut = 10
Dim
res
As
String
= hc.GetData()
MessageBoxA.Show(res)
'收到的JSON数据
Output.Show("状态码:"
& hc.StatusCode)
Output.Show("Content-Type:"
& hc.ResponseContentType)
2、提交表单:
Dim
hc
As
New
HttpClient("https://free.mockerapi.com/post")
' 填充表单字段
hc.FormData.Add("username",
"Foxtable用户")
hc.FormData.Add("phone",
"13800138000")
hc.FormData.Add("amount",
"1000")
Dim
res
As
String
= hc.GetData()
MessageBox.Show("表单提交返回:"
& res)
3、读写Cookie
Dim
hc
As
New
HttpClient("https://postman-echo.com/cookies")
' 发送自定义Cookie
hc.sCookies.Add("token",
"abc123xyz")
hc.sCookies.Add("userid",
"10086")
Dim
res
As
String
= hc.GetData()
MessageBoxA.Show(res)
' 遍历服务器返回的Cookie
For
Each
k
As
String
In
hc.rCookies.Keys
Output.Show("返回Cookie:"
& k &
"="
& hc.rCookies(k))
Next
4、自定义请求头
Dim
hc
As
New
HttpClient("https://free.mockerapi.com/headers")
' 添加鉴权头、自定义标识
hc.Headers.Add("Authorization",
"Bearer test-token-001")
hc.Headers.Add("User-Agent",
"Foxtable 2026 Client")
hc.Headers.Add("Accept",
"application/json")
Dim
res
As
String
= hc.GetData()
MessageBox.Show(res)
5、读取响应头
Dim
hc
As
New
HttpClient("https://free.mockerapi.com/headers")
' 自定义客户端请求头
hc.Headers.Add("Client-Version",
"Foxtable 2026.6.29")
hc.Headers.Add("Device",
"Windows")
Dim
res
As
String
= hc.GetData()
'
循环读取所有服务端返回响应头
For
Each
headerKey
As
String
In
hc.ResponseHeaders.Keys
Dim
headerVal
As
String
= hc.ResponseHeaders(headerKey)
Output.Show(headerKey &
":"
& headerVal)
Next
6、模拟表单上传文件:
Dim
hc
As
New
HttpClient("https://httpbin.org/post")
hc.FormData.Add("uploader",
"管理员")
hc.Files.Add("file1",
"c:\abc\123.jpg")
hc.Files.Add("file1",
"c:\abc\fox.png")
Dim
res
As
String
= hc.GetData()
MessageBox.Show(res)
7、下载文件
Dim
hc
As
New
HttpClient("http://www.foxtable.com/lib/images/banner1a.jpg")
If
hc.GetFile("c:\abc\banner.png")
Then
MessageBox.Show("文件下载成功!")
Else
MessageBox.Show("下载失败,状态码:"
& hc.StatusCode)
End
If
8、查询JSON数据
'
查询业务数据
Dim
hc
As
New
HttpClient("https://jsonplaceholder.typicode.com/posts")
Dim
res = hc.GetData()
Output.Show(res)
9、发送JSON数据
' POST新增业务数据
Dim
hc
As
New
HttpClient("https://jsonplaceholder.typicode.com/posts")
hc.ContentType =
"application/json"
hc.Content =
"{""title"":""Foxtable测试单据"",""body"":""使用HttpClient同步数据"",""userId"":1}"
Dim
ret = hc.GetData()
MessageBox.Show("新增返回:"
& ret)
10、异步请求
'''Async
Dim
hc
As
New
HttpClient("https://jsonplaceholder.typicode.com/posts")
Dim
res
As
String
=
Await
hc.GetDataAsync()
Output.Show(res)
11、异步下载
'''Async
Dim
hc
As
New
HttpClient("http://www.foxtable.com/lib/images/banner1a.jpg")
Dim
ret
As
Boolean
=
Await
hc.GetFileAsync("c:\abc\banner.png")
If
ret
Then
MessageBoxA.Show("文件下载成功!")
Else
MessageBoxA.Show("下载失败,状态码:"
& hc.StatusCode)
End
If
12、伪装成Chrome浏览器
Dim
hc
As
New
HttpClient("https://free.mockerapi.com/headers")
' 自定义UA,伪装成Chrome浏览器
hc.UserAgent =
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/120.0.0.0"
hc.Headers.Add("Client-Soft",
"Foxtable 2027")
Dim
res
As
String
= hc.GetData()
MessageBoxA.Show(res)
13、屏蔽内置错误提示
Dim
hc
As
New
HttpClient("https://free.mockerapi.com/abcd")
hc.SkipError =
True
'
关闭内置错误弹窗
Dim
res
As
String
= hc.GetData()
' 手动根据状态码区分成功/失败,并进行错误处理
If
hc.StatusCode <> 200
Then
Output.Show("接口访问失败,状态码:"
& hc.StatusCode &
",响应文本:"
& res)
Else
Output.Show("请求成功:"
& res)
End
If
14、查询天气和空气质量
互联网大厂和政府提供的公共服务数不胜数,单单百度提供的就有近千种,几乎无所不含。
以下代码可直接在命令窗口执行,即可查询指定城市的天气情况:
Dim
ak
As
String
=
"bYDdADrPUCNkSAID9bJU70EF8Iy5htGu"
'请去百度地图开放平台申请自己的API
Key
Dim
url
As
String
=
"https://api.map.baidu.com/weather/v1/?district=醴陵市&data_type=all&ak="
& ak
Dim
hc
As
New
HttpClient(url)
Dim
ret
As
String
= hc.GetData()
Dim
jo
As
JObject =
JsonConvert.DeserializeObject(ret)
Output.Show(jo.ToString())
运行上述代码前,请先去百度地图开放平台申请自己的API Key,地址:
https://lbsyun.baidu.com/