搞定以POST方式发送的HTTP头
我一开始是在网上找资料,手工输入,不得行(hang),整得郁闷(-_-!),就用VB6写了个Winsock,用其来对本地主机80端口监听,在浏览器中向localhost提交form表单,以获得提交信息。
监听代码如下(VB6):
Dim AllData As String
Private Sub Command1_Click()
Command1.Enabled = False
Winsock1.LocalPort = "80"
Winsock1.Listen
End Sub
Private Sub Command2_Click()
End
End Sub
Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
Winsock1.Close
Winsock1.Accept requestID
End Sub
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim gDate() As Byte
ReDim gData(bytesTotal) As Byte
Winsock1.GetData gData
For i = 0 To bytesTotal - 1
AllData = AllData & Chr(gData(i))
Next
Text1.Text = AllData
End Sub
这样一来,只要有信息向本地80端口提交,就能将其截获。
当我在浏览器中提交form的时候,截获到如下信息:
POST /Test HTTP/1.1
Accept: */*
Accept-Language: zh-cn
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; Maxthon; .NET CLR 1.1.4322)
Host: localhost
Content-Length: 21
Connection: Keep-Alive
Cache-Control: no-cache
value1=123&value2=456
这就是标准的以POST方式发送的HTTP头了(我当初太笨,怎么不早点想到-_-!)
其中,第一行的/Test就是发送目标地址的路径,也就是<form action="http://localhost/Test"> 中的"/Test"
Host:LocalHost就是你的目标主机,这里我设的是本地主机
最后一行的value1=123&value2=456就是发送的表单内容及其的值。
用HTML描述的话就是:
<input type="text" name="value1" value="123">
<input type="text" name="value2" value="456">
这两项就是最主要的信息(要发送的目标和要发送的内容)。
要注意的一点就是,在写HTTP头的时候,在"Cache-Control:no-cache"和"value1=123&value2=456"这两行之间一定要留一个空行,而"value1=123&value2=456"之后就什么也不要留了,一个空格都不能留,不然就会发送失败!(为什么要这样做?这个要问W3C了,他们就是这样规定的,这个就是传说中的“标准”~_~)
好了,既然HTTP的格式搞好了,那就可以自己写个头来发送了~~~
见下面代码(VB6):
Private Sub Command1_Click()
Winsock1.RemoteHost = RemoteHost.Text
Winsock1.RemotePort = "80"
Winsock1.Connect
End Sub
Private Sub Command2_Click()
Winsock1.Close
End Sub
Private Sub Label2_Click()
End Sub
Private Sub Winsock1_Connect()
Dim sData
sData = ""
sData = sData & "POST " & Action.Text & " HTTP/1.1" & vbCrLf
sData = sData & "Accept: */*" & vbCrLf
sData = sData & "Accept-Language: zh-cn" & vbCrLf
sData = sData & "Content-Type: application/x-www-form-urlencoded" & vbCrLf
sData = sData & "Accept-Encoding: gzip, deflate" & vbCrLf
sData = sData & "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; Maxthon; .NET CLR 1.1.4322)" & vbCrLf
sData = sData & "Host: " & Winsock1.RemoteHost & vbCrLf
sData = sData & "Content-Length: " & Len(Value) & vbCrLf
sData = sData & "Connection: Keep-Alive" & vbCrLf
sData = sData & "Cache-Control: no-cache" & vbCrLf & vbCrLf
sData = sData & Value.Text
Winsock1.SendData sData
End Sub
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim gDate() As Byte
ReDim gData(bytesTotal) As Byte
Winsock1.GetData gData
For i = 0 To bytesTotal - 1
AllData = AllData & Chr(gData(i))
Next
Text2.Text = AllData
End Sub
其中,
Private Sub Winsock1_Connect()
Dim sData
sData = ""
sData = sData & "POST " & Action.Text & " HTTP/1.1" & vbCrLf
sData = sData & "Accept: */*" & vbCrLf
sData = sData & "Accept-Language: zh-cn" & vbCrLf
sData = sData & "Content-Type: application/x-www-form-urlencoded" & vbCrLf
sData = sData & "Accept-Encoding: gzip, deflate" & vbCrLf
sData = sData & "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; Maxthon; .NET CLR 1.1.4322)" & vbCrLf
sData = sData & "Host: " & Winsock1.RemoteHost & vbCrLf
sData = sData & "Content-Length: " & Len(Value) & vbCrLf
sData = sData & "Connection: Keep-Alive" & vbCrLf
sData = sData & "Cache-Control: no-cache" & vbCrLf & vbCrLf
sData = sData & Value.Text
Winsock1.SendData sData
End Sub
这段代码是向目标主机发送HTTP头。
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim gDate() As Byte
ReDim gData(bytesTotal) As Byte
Winsock1.GetData gData
For i = 0 To bytesTotal - 1
AllData = AllData & Chr(gData(i))
Next
Text2.Text = AllData
End Sub
这段代码就用来获得从目标返回的数据信息,
这样一来,就可以模拟浏览器向服务器发送表单信息发,其实其原理还是多简单的。。。。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器