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

  • 相关阅读:
    VMware搭建VMware ESXi 6.7
    77. Combinations
    47. Permutations II
    system design
    37. Sudoku Solver
    12月9日学习日志
    12月8日学习日志
    12月7日学习日志
    12月6日学习日志
    12月5日学习日志
  • 原文地址:https://www.cnblogs.com/frustrate2/p/2759088.html
Copyright © 2011-2022 走看看