搞定以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
这段代码就用来获得从目标返回的数据信息,
这样一来,就可以模拟浏览器向服务器发送表单信息发,其实其原理还是多简单的。。。。

posted @ 2007-04-14 21:27  随机  阅读(5637)  评论(1编辑  收藏  举报