VB 下 Post 中文编码的 http request
2008-07-09 21:42
183 查看
这是以前的一个机器人程序, 用来直接向 http server 提交中文的信息。程序使用了两个特别的控件:inet 与 web browser。
初始化:
Private Sub Form_Load()
objInet.Protocol = icHTTP
objInet.RequestTimeout = 12
web.Navigate2 "about:blank"
End Sub
构造 http 头:
strUrl = Trim(text_Url.Text)
If strUrl = "" Then Exit Sub
strHead = _
"Accept-Language: zh-cn" & vbCrLf _
& "Referer: " & strUrl & vbCrLf _
& "Content-Type: application/x-www-form-urlencoded" & vbCrLf _
& "User-Agent: Mozilla/4.0 (compatible; MSIE 5.5)" & vbCrLf _
& "Accept-encoding: gzip , deflate" & vbCrLf _
& "Connection: Keep-Alive" & vbCrLf _
& "cache-Control: no-cache" & vbCrLf
& "Cookie: " & Trim(text_Cookie.Text) & vbCrLf & vbCrLf
构造 post 内容:
strPost = Trim(text_TagName.Text) & "=" & Encode(user) & "&" _
& Trim(text_TagPassword.Text) & "=" & pass & "&" _
& Trim(text_TagSubject.Text) & "=" & Encode(title) & "&" _
& Trim(text_Other.Text)
发送:
objInet.Execute strUrl, "POST", strPost, strHead
接受返回的 html 文件,显示在 web browser 上:
Private Sub displayHTML()
Dim doc As HTMLDocument
Dim obj As Object
Dim col As HTMLElementCollection
Dim anchor As HTMLAnchorElement
Dim body As HTMLBody
Dim str As String
Dim s1 As String, s2 As String
On Error GoTo endit
s1 = ""
s2 = ""
Do
DoEvents
s1 = objInet.GetChunk(512, icString)
s2 = s2 & s1
Loop Until s1 = ""
lbl_Status = "OK"
bDone = True
timeoutCount = 0
Set doc = web.Document
Set body = doc.body
body.innerHTML = s2
endit:
End Sub
中文 GB2312 编码:
Function Encode(ByRef vKey As String) As String
Dim i As Long, v As Long
Dim temp As String
Encode = ""
For i = 1 To Len(vKey)
temp = Mid(vKey, i, 1)
v = AscW(temp)
If temp = " " Then
Encode = Encode & "%20"
ElseIf v > 256 Then
v = AscW(StrConv(temp, vbFromUnicode, &H804))
v = IIf(v < 0, v + 65536, v)
Encode = Encode & ToHex(v Mod 256) & ToHex(v / 256)
Else
Encode = Encode & temp
End If
Next
End Function
Function ToHex(n As Long) As String
ToHex = IIf(n < 16, "%0" & Hex(n), "%" & Hex(n))
End Function
初始化:
Private Sub Form_Load()
objInet.Protocol = icHTTP
objInet.RequestTimeout = 12
web.Navigate2 "about:blank"
End Sub
构造 http 头:
strUrl = Trim(text_Url.Text)
If strUrl = "" Then Exit Sub
strHead = _
"Accept-Language: zh-cn" & vbCrLf _
& "Referer: " & strUrl & vbCrLf _
& "Content-Type: application/x-www-form-urlencoded" & vbCrLf _
& "User-Agent: Mozilla/4.0 (compatible; MSIE 5.5)" & vbCrLf _
& "Accept-encoding: gzip , deflate" & vbCrLf _
& "Connection: Keep-Alive" & vbCrLf _
& "cache-Control: no-cache" & vbCrLf
& "Cookie: " & Trim(text_Cookie.Text) & vbCrLf & vbCrLf
构造 post 内容:
strPost = Trim(text_TagName.Text) & "=" & Encode(user) & "&" _
& Trim(text_TagPassword.Text) & "=" & pass & "&" _
& Trim(text_TagSubject.Text) & "=" & Encode(title) & "&" _
& Trim(text_Other.Text)
发送:
objInet.Execute strUrl, "POST", strPost, strHead
接受返回的 html 文件,显示在 web browser 上:
Private Sub displayHTML()
Dim doc As HTMLDocument
Dim obj As Object
Dim col As HTMLElementCollection
Dim anchor As HTMLAnchorElement
Dim body As HTMLBody
Dim str As String
Dim s1 As String, s2 As String
On Error GoTo endit
s1 = ""
s2 = ""
Do
DoEvents
s1 = objInet.GetChunk(512, icString)
s2 = s2 & s1
Loop Until s1 = ""
lbl_Status = "OK"
bDone = True
timeoutCount = 0
Set doc = web.Document
Set body = doc.body
body.innerHTML = s2
endit:
End Sub
中文 GB2312 编码:
Function Encode(ByRef vKey As String) As String
Dim i As Long, v As Long
Dim temp As String
Encode = ""
For i = 1 To Len(vKey)
temp = Mid(vKey, i, 1)
v = AscW(temp)
If temp = " " Then
Encode = Encode & "%20"
ElseIf v > 256 Then
v = AscW(StrConv(temp, vbFromUnicode, &H804))
v = IIf(v < 0, v + 65536, v)
Encode = Encode & ToHex(v Mod 256) & ToHex(v / 256)
Else
Encode = Encode & temp
End If
Next
End Function
Function ToHex(n As Long) As String
ToHex = IIf(n < 16, "%0" & Hex(n), "%" & Hex(n))
End Function
相关文章推荐
- 处理 httprequest post 编码问题
- HttpWebRequest模拟POST提交防止中文乱码
- HttpClient POST的中文编码问题
- HttpClient3 POST的中文编码问题
- webrequest post 数据 编码 HttpWebRequest get
- android http post请求,设置utf-8编码,服务端还是出现中文乱码 解决
- C# HttpRequest 中文编码问题
- ASIHttpRequest 使用过程中,中文编码的问题
- HttpWebRequest模拟POST提交防止中文乱码
- XMLHttpRequest的POST中文表单问题解决方案
- ASIHttpRequest中Post中文乱码解决
- xmlHttpRequest 以Post方式发数据到Asp.net页,在gb2312编码下的解决办法
- HttpClient POST的中文编码问题
- HttpPost 中文编码问题 EntityBuilder
- asp.net HttpWebRequest post 中文数据
- xmlHttpRequest 以Post方式发数据到Asp.net页,在gb2312编码下的解决办法
- ASIHttpRequest中Post中文乱码解决
- C# HttpRequest 中文编码问题
- HttpServletRequest setCharacterEncoding 接收post方式传递的中文参数
- HttpRequest Post中文转utf-8乱码问题解决方法