【问题标题】:How to send a POST in .net vb?如何在 .net vb 中发送 POST?
【发布时间】:2011-08-31 19:11:56
【问题描述】:

我要做的是让我的用户输入电话号码和消息,然后将其发布给发送消息的文本营销人员。

目前如果我使用响应。重定向消息意义..

response.redirect("http://www.textmarketer.biz/gateway/?username=*****&password=*****&message=test+message&orig=test&number=447712345678")

但是,我不想将用户发送到那里。我想做的就是将数据发布到 url,这就是现在的全部内容,用户留在当前页面上。

有什么帮助吗?

【问题讨论】:

  • 您发布的示例没有POST 数据。这是一个 GET 请求(数据在 url/查询字符串中)。如您所说,如果您需要发布,请在下面查看我修改后的答案。

标签: asp.net vb.net


【解决方案1】:

实际上,您不必做这个服务器端 (vb),只需简单的 html 即可:

<html>
    <body>
        <form action="http://google.com" method="post">
            <input type="hidden" value="somevalue"/>
            <input Type="submit" value="Submit"/>
        </form>
    </body>
</html>

这会将数据(实际上是重定向)发布到 google.com。

也许您可以使用客户端脚本 (jQuery) - $.ajax() 或 $.post()。但我认为您将面临跨域限制(有一种解决方法,但不是那么干净和直接)。

另一个是使用 HttpWebRequest 类。这是服务器端,帖子将来自您的服务器而不是客户端(就像第一种方法一样)。调用 request.GetResponse() 后,您可以从远程服务器检索输出并将其呈现在您的页面上。但是,如果您想发布并重定向到远程 url,那么我想您应该使用第一种方法。

编辑:

在 VB 中试试这个:

Option Infer On
Imports System.Net
Imports System.Text


Public Class Test

    Private Sub TESTRUN()
        Dim s As HttpWebRequest
        Dim enc As UTF8Encoding
        Dim postdata As String
        Dim postdatabytes As Byte()
        s = HttpWebRequest.Create("http://www.textmarketer.biz/gateway/")
        enc = New System.Text.UTF8Encoding()
        postdata = "username=*****&password=*****&message=test+message&orig=test&number=447712345678"
        postdatabytes = enc.GetBytes(postdata)
        s.Method = "POST"
        s.ContentType = "application/x-www-form-urlencoded"
        s.ContentLength = postdatabytes.Length

        Using stream = s.GetRequestStream()
            stream.Write(postdatabytes, 0, postdatabytes.Length)
        End Using
        Dim result = s.GetResponse()
    End Sub
End Class

更新2:

在 VB.net 中使用 HttpWebRequest 的 GET 请求。

Dim s As HttpWebRequest
Dim username = "username=" + HttpUtility.UrlEncode("yourusername")
Dim password = "password=" + HttpUtility.UrlEncode("yourp@assword)!==&@(*#)!@#(_")
Dim message = "message=" + HttpUtility.UrlEncode("yourmessage")
Dim orig = "orig=" + HttpUtility.UrlEncode("dunno what this is")
Dim num = "number=" + HttpUtility.UrlEncode("123456")
Dim sep = "&"
Dim sb As New StringBuilder()
sb.Append(username).Append(sep).Append(password).Append(sep)
sb.Append(message).Append(sep).Append(orig).Append(sep).Append(num)

s = HttpWebRequest.Create("http://www.textmarketer.biz/gateway/?" + sb.ToString())

s.Method = "GET"
Dim result = s.GetResponse()

【讨论】:

  • 我不希望用户重定向。我只想将数据发布到 url,仅此而已。理想的服务器端,我会研究 httpwebrequest,但我真的不想要一个请求,我想我已经尝试过了,但没有成功
  • 远程服务器是否需要身份验证之类的?或者可能是必需的 cookie?
  • 不,抱歉,这也没有用,也不需要他们的请求
  • 您能否至少告诉我们错误/异常是什么?你真的需要POST 操作吗?或GET 操作..
  • 这可能是因为您不应该发送POST 请求。我已经更新了我的答案,展示了如何发送 GET 请求...
【解决方案2】:

你必须使用 webrequest 类。参考http://msdn.microsoft.com/en-us/library/debx8sh9.aspx

【讨论】:

  • 我在发布这个问题之前尝试了这个确切的例子。我认为它会起作用,但没有。
  • 你有什么异常吗?检查您发布的 uri 及其预期的参数。
  • 我正在复制我使用 response.redirect 时使用的相同参数,它发送了已发送的消息
【解决方案3】:

不要做这个服务器端,但客户端使用AJAX

jQuery ajax 库相当不错。

【讨论】:

  • 我没有使用 Ajax 的经验,所以我不确定这一切意味着什么以及从哪里开始
  • 这就是为什么我更愿意找到服务器端选项
  • @Beginner - 你不应该害怕学习新技术,特别是如果它是正确的......
  • 如果是客户端,任何人都无法查看源代码并查看我的用户名和密码并使用积分吗?
  • @Beginner - 为什么你认为POST 会更安全?
猜你喜欢
  • 2021-10-04
  • 2015-03-19
  • 2022-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多