VB.net 使用 SOCKETS 发送 HTTP POST 请求 [英] VB.net sending HTTP POST request using SOCKETS

查看:62
本文介绍了VB.net 使用 SOCKETS 发送 HTTP POST 请求的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我这里有一个使用 SOCKETS 的有效 HTTP 请求,但我不知道如何发送 POST 请求.

I have here a working HTTP request using SOCKETS but I do not know how to send POST requests.

这是我的代码:

            Dim hostName As String
            Dim hostPort As Integer
            Dim response As Integer
            Dim iphe As IPHostEntry = Dns.GetHostEntry("www.yellowpages.com")
            hostName = iphe.AddressList(0).ToString()
            hostPort = 80
            response = 0

            Dim host As IPAddress = IPAddress.Parse(hostName)
            Dim hostep As New IPEndPoint(host, hostPort)
            Dim sock As New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
            sock.Connect(hostep)

            Dim request = "GET /nationwide/mip/choice-hotels-international-462092189/send_email?lid=161004592 HTTP/1.1" & vbCr & vbLf &
                          "Host: 208.93.105.105" & vbCr & vbLf &
                          "User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.72 Safari/537.36" & vbCr & vbLf &
                          "Connection: keep-alive" & vbCr & vbLf &
                          "Content-Type: application/x-www-form-urlencoded" & vbCr & vbLf &
                          "Content-Length: 0" & vbCr & vbLf & vbCr & vbLf

            response = sock.Send(Encoding.UTF8.GetBytes(request))
            response = sock.Send(Encoding.UTF8.GetBytes(vbCr & vbLf))

            sock.Close()

我想用这些数据填写我在代码中提到的这个网络表单:

I wanted to fill-up this webform i have mentioned in my code with these data:

email%5Bto_address%5D=test@mail.com&email%5Bfrom_name%5D=Test Name&email%5Bfrom_address%5D=test@mail.com&email%5Bnote%5D=Hello

我该怎么做?我使用以下代码使用 HttpWebRequest 成功完成了此操作:

How do I do it? I have successfully done this using HttpWebRequest using the code below:

        Dim cweb As String = "http://www.yellowpages.com/novato-ca/mip/creative-memories-consultant-senior-director-461725587/send_email?lid=171673036"
        Dim POST As String = "&email%5Bto_address%5D=recipient@email.com&email%5Bfrom_name%5D=Test Name&email%5Bfrom_address%5D=sender@mail.com&email%5Bnote%5D=Hello There"       

        Dim request As HttpWebRequest
        Dim response As HttpWebResponse

        request = CType(WebRequest.Create(cweb), HttpWebRequest)
        request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.72 Safari/537.36"
        request.AllowAutoRedirect = True
        request.ContentType = "application/x-www-form-urlencoded"
        request.ContentLength = POST.Length
        request.Method = "POST"
        request.KeepAlive = True

        Dim requestStream As Stream = request.GetRequestStream()
        Dim postBytes As Byte() = Encoding.ASCII.GetBytes(POST)
        requestStream.Write(postBytes, 0, postBytes.Length)
        requestStream.Close()

        response = CType(request.GetResponse(), HttpWebResponse)
        response.Close()

但我想通过使用 SOCKETS 重新创建这个概念.

But I wanted to recreate this concept by the use of SOCKETS.

推荐答案

如果您可以使用 Sockets 发送 GET 请求,那么您当然可以发送 POST 请求.

If you can send a GET request using Sockets then you can certainly send a POST request.

不过,您必须正确格式化.您可以查看 RFC 以了解整个 HTTP 规范.

You have to format it properly though. You can check the RFC for the whole HTTP specs.

POST 示例:

Dim request = "POST /nationwide/mip/choice-hotels-international-462092189/send_email?lid=161004592 HTTP/1.1" & Environment.Newline &
                          "Host: 208.93.105.105" & Environment.Newline &
                          "User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.72 Safari/537.36" & Environment.Newline &
                          "Connection: keep-alive" & Environment.Newline &
                          "Content-Type: application/x-www-form-urlencoded" & Environment.Newline &
                          "Content-Length: 22" & Environment.Newline & Environment.Newline &
              "this%20is%20the%20data"

这篇关于VB.net 使用 SOCKETS 发送 HTTP POST 请求的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆