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/
 


本页地址:http://www.foxtable.com/webhelp/topics/6888.htm