Skip to content

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%E7

UrlDecode

对 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%26e

UrlDecodeUtf8

对 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

参数:

参数名类型说明
DicScripting.Dictionary要转换的字典
IsUrlEncodeBoolean是否对值进行 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

参数:

参数名类型说明
ContentString查询字符串
ObjScripting.Dictionary存储结果的字典
IsUrlDecodeBoolean是否进行 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")   ' 输出: 25

ParseKeyValue

解析键值对格式的字符串到字典(如 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 token123

Form URL-Encoded 转换

ToWwwFormUrlencoded

将集合对象转换为 application/x-www-form-urlencoded 格式。

vb
Public Function ToWwwFormUrlencoded(ByRef Obj As Object, Optional ByVal IsUrlEncode As Boolean = True) As String

参数:

参数名类型说明
ObjObject集合对象(cCollection 或 Scripting.Dictionary)
IsUrlEncodeBoolean是否对值进行 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=123456

FromWwwFormUrlencoded

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")   ' 输出: 25

HTTP 方法映射

MapMethod

将 HTTP 方法名映射为内部索引。

vb
Public Function MapMethod(Name As String) As Long

映射表:

方法名索引
ANY0
POST1
GET2
PUT3
DELETE4
OPTIONS5

示例:

vb
Dim Index As Long
Index = VBMAN.ToolsHttp.MapMethod("GET")
Debug.Print Index  ' 输出: 2

Index = VBMAN.ToolsHttp.MapMethod("POST")
Debug.Print Index  ' 输出: 1

MapMethodName

将内部索引映射为 HTTP 方法名。

vb
Public Function MapMethodName(Index As Long) As String

示例:

vb
Dim MethodName As String
MethodName = VBMAN.ToolsHttp.MapMethodName(2)
Debug.Print MethodName  ' 输出: GET

cHttpCrossDomain - HTTP 跨域配置

概述

用于配置 HTTP 服务器的 CORS(跨域资源共享)响应头。

属性

属性类型默认值说明
EnableBooleanFalse是否启用跨域支持
AllowOriginString"*"允许的源
AllowMethodsString"*"允许的方法
AllowHeadersString"*"允许的请求头
AllowCredentialsBooleanTrue是否允许携带凭证
MaxAgeLong86400000预检请求缓存时间(毫秒)

用法

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

VB6及其LOGO版权为微软公司所有