Tools - HTTP 工具类
cToolsHttp - HTTP 编码工具
概述
提供 URL 编码/解码、HTTP 相关字符串处理、查询字符串构建、HTTP 方法映射等功能。
URL 编解码(GB2312)
UrlEncode
对字符串进行 GB2312 URL 编码。
vb
Public Function UrlEncode(ByRef strURL As String) As String说明:
- 使用 GB2312 编码
- 适合处理中文等传统编码场景
示例:
vb
Dim Encoded As String
Encoded = VBMAN.ToolsHttp.UrlEncode("你好世界")
Debug.Print Encoded ' 输出: %C4%E3%BA%C3%CA%C0%BD%E7UrlDecode
对 GB2312 URL 编码的字符串进行解码。
vb
Public Function UrlDecode(ByVal url As String) As String示例:
vb
Dim Decoded As String
Decoded = VBMAN.ToolsHttp.UrlDecode("%C4%E3%BA%C3%CA%C0%BD%E7")
Debug.Print Decoded ' 输出: 你好世界URL 编解码(UTF-8)
UrlEncodeUtf8
对字符串进行 UTF-8 URL 编码(RFC3986 标准)。
vb
Public Function UrlEncodeUtf8(ByVal szInput As Variant) As String说明:
- 遵循 RFC3986 标准
- 安全字符:
A-Z a-z 0-9 - _ . ~ - 其他字符进行百分号编码
- 支持多字节 UTF-8 字符
示例:
vb
Dim Encoded As String
' ASCII 字符
Encoded = VBMAN.ToolsHttp.UrlEncodeUtf8("Hello World!")
Debug.Print Encoded ' 输出: Hello%20World%21
' 中文字符
Encoded = VBMAN.ToolsHttp.UrlEncodeUtf8("你好世界")
Debug.Print Encoded ' 输出: %E4%BD%A0%E5%A5%BD%E4%B8%96%E7%95%8C
' 特殊字符
Encoded = VBMAN.ToolsHttp.UrlEncodeUtf8("a/b+c=d&e")
Debug.Print Encoded ' 输出: a%2Fb%2Bc%3Dd%26eUrlDecodeUtf8
对 UTF-8 URL 编码的字符串进行解码。
vb
Public Function UrlDecodeUtf8(ByVal url As String) As String示例:
vb
Dim Decoded As String
Decoded = VBMAN.ToolsHttp.UrlDecodeUtf8("Hello%20World%21")
Debug.Print Decoded ' 输出: Hello World!
Decoded = VBMAN.ToolsHttp.UrlDecodeUtf8("%E4%BD%A0%E5%A5%BD%E4%B8%96%E7%95%8C")
Debug.Print Decoded ' 输出: 你好世界查询字符串操作
AddToQueryString
将查询参数添加到 URL。
vb
Public Function AddToQueryString(ByVal url As String, ByVal QS As String) As String说明:
- 自动判断 URL 是否已有查询参数
- 自动添加
?或&
示例:
vb
Dim Url As String
Url = VBMAN.ToolsHttp.AddToQueryString("http://api.example.com/user", "id=123")
Debug.Print Url ' 输出: http://api.example.com/user?id=123
Url = VBMAN.ToolsHttp.AddToQueryString("http://api.example.com/user?id=123", "name=张三")
Debug.Print Url ' 输出: http://api.example.com/user?id=123&name=张三MakeContent
将字典构建为查询字符串格式。
vb
Public Function MakeContent(Dic As Scripting.Dictionary, Optional IsUrlEncode As Boolean = True) As String参数:
| 参数名 | 类型 | 说明 |
|---|---|---|
Dic | Scripting.Dictionary | 要转换的字典 |
IsUrlEncode | Boolean | 是否对值进行 URL 编码(默认 True) |
示例:
vb
Dim Params As New Scripting.Dictionary
Params.Add "name", "张三"
Params.Add "age", "25"
Params.Add "city", "北京"
Dim QueryString As String
QueryString = VBMAN.ToolsHttp.MakeContent(Params)
Debug.Print QueryString ' 输出: name=%E5%BC%A0%E4%B8%89&age=25&city=%E5%8C%97%E4%BA%AC
' 不编码
QueryString = VBMAN.ToolsHttp.MakeContent(Params, False)
Debug.Print QueryString ' 输出: name=张三&age=25&city=北京ParseContent
解析查询字符串到字典。
vb
Public Function ParseContent(Content As String, Obj As Scripting.Dictionary, Optional IsUrlDecode As Boolean = True) As Boolean参数:
| 参数名 | 类型 | 说明 |
|---|---|---|
Content | String | 查询字符串 |
Obj | Scripting.Dictionary | 存储结果的字典 |
IsUrlDecode | Boolean | 是否进行 URL 解码(默认 True) |
示例:
vb
Dim Params As New Scripting.Dictionary
Dim Success As Boolean
Success = VBMAN.ToolsHttp.ParseContent("name=%E5%BC%A0%E4%B8%89&age=25", Params)
Debug.Print Params("name") ' 输出: 张三
Debug.Print Params("age") ' 输出: 25ParseKeyValue
解析键值对格式的字符串到字典(如 HTTP Headers)。
vb
Public Function ParseKeyValue(Content As String, Obj As Scripting.Dictionary) As Boolean说明:
- 按行分割
- 每行按第一个
:分割为键和值 - 适合解析 HTTP Headers
示例:
vb
Dim Headers As New Scripting.Dictionary
Dim HeaderText As String
HeaderText = "Content-Type: application/json" & vbCrLf & _
"Authorization: Bearer token123" & vbCrLf & _
"X-Custom-Header: value"
VBMAN.ToolsHttp.ParseKeyValue HeaderText, Headers
Debug.Print Headers("Content-Type") ' 输出: application/json
Debug.Print Headers("Authorization") ' 输出: Bearer token123Form URL-Encoded 转换
ToWwwFormUrlencoded
将集合对象转换为 application/x-www-form-urlencoded 格式。
vb
Public Function ToWwwFormUrlencoded(ByRef Obj As Object, Optional ByVal IsUrlEncode As Boolean = True) As String参数:
| 参数名 | 类型 | 说明 |
|---|---|---|
Obj | Object | 集合对象(cCollection 或 Scripting.Dictionary) |
IsUrlEncode | Boolean | 是否对值进行 URL 编码(默认 True) |
示例:
vb
Dim Dic As New Scripting.Dictionary
Dic.Add "username", "admin"
Dic.Add "password", "123456"
Dim FormData As String
FormData = VBMAN.ToolsHttp.ToWwwFormUrlencoded(Dic)
Debug.Print FormData ' 输出: username=admin&password=123456FromWwwFormUrlencoded
将 application/x-www-form-urlencoded 格式解析到集合对象。
vb
Public Function FromWwwFormUrlencoded(ByVal Content As String, ByRef Obj As Object, Optional ByVal IsUrlDecode As Boolean = True) As Boolean示例:
vb
Dim Dic As New Scripting.Dictionary
Dim Success As Boolean
Success = VBMAN.ToolsHttp.FromWwwFormUrlencoded("name=张三&age=25", Dic)
Debug.Print Dic("name") ' 输出: 张三
Debug.Print Dic("age") ' 输出: 25HTTP 方法映射
MapMethod
将 HTTP 方法名映射为内部索引。
vb
Public Function MapMethod(Name As String) As Long映射表:
| 方法名 | 索引 |
|---|---|
| ANY | 0 |
| POST | 1 |
| GET | 2 |
| PUT | 3 |
| DELETE | 4 |
| OPTIONS | 5 |
示例:
vb
Dim Index As Long
Index = VBMAN.ToolsHttp.MapMethod("GET")
Debug.Print Index ' 输出: 2
Index = VBMAN.ToolsHttp.MapMethod("POST")
Debug.Print Index ' 输出: 1MapMethodName
将内部索引映射为 HTTP 方法名。
vb
Public Function MapMethodName(Index As Long) As String示例:
vb
Dim MethodName As String
MethodName = VBMAN.ToolsHttp.MapMethodName(2)
Debug.Print MethodName ' 输出: GETcHttpCrossDomain - HTTP 跨域配置
概述
用于配置 HTTP 服务器的 CORS(跨域资源共享)响应头。
属性
| 属性 | 类型 | 默认值 | 说明 |
|---|---|---|---|
Enable | Boolean | False | 是否启用跨域支持 |
AllowOrigin | String | "*" | 允许的源 |
AllowMethods | String | "*" | 允许的方法 |
AllowHeaders | String | "*" | 允许的请求头 |
AllowCredentials | Boolean | True | 是否允许携带凭证 |
MaxAge | Long | 86400000 | 预检请求缓存时间(毫秒) |
用法
vb
' 启用跨域
VBMAN.HttpCrossDomain.Enable = True
' 自定义配置
With VBMAN.HttpCrossDomain
.Enable = True
.AllowOrigin = "https://example.com"
.AllowMethods = "GET, POST, PUT, DELETE"
.AllowHeaders = "Content-Type, Authorization"
.AllowCredentials = True
End With在 HttpServer 中使用
vb
Private Sub Server_OnBeforeRequest(Request As cHttpServerRequest)
' 自动添加跨域头
VBMAN.HttpCrossDomain.AddTo Request.Response.Headers
End Sub完整示例
vb
Private Sub HttpDemo()
' URL 编码
Dim Url As String
Url = "http://api.example.com/search?q=" & _
VBMAN.ToolsHttp.UrlEncodeUtf8("VB6 编程")
Debug.Print Url
' 构建查询参数
Dim Params As New Scripting.Dictionary
Params.Add "page", "1"
Params.Add "size", "20"
Params.Add "keyword", "VB6"
Dim QueryString As String
QueryString = VBMAN.ToolsHttp.MakeContent(Params)
Url = "http://api.example.com/list?" & QueryString
Debug.Print Url
' 解析查询字符串
Dim Parsed As New Scripting.Dictionary
VBMAN.ToolsHttp.ParseContent QueryString, Parsed
Debug.Print "页码: " & Parsed("page")
Debug.Print "每页: " & Parsed("size")
' 解析 HTTP Headers
Dim Headers As New Scripting.Dictionary
Dim HeaderText As String
HeaderText = "Content-Type: application/json" & vbCrLf & _
"Authorization: Bearer xxx"
VBMAN.ToolsHttp.ParseKeyValue HeaderText, Headers
End Sub