发送POST值并使用HttpWebRequest获取响应

时间:2013-01-01 13:17:53

标签: vb.net

我有这个php文件:

<?php

if (isset($_POST['message']))
{
    $msg = $_POST['message'];

    if($msg == "age")
        echo "I am 18";
    else if($msg == "name")
        echo "my name is Jonathan";
    else
        echo "I do not know";

}

?>

我想在VB.NET中创建一个HttpWebRequest,如果我从TextBox发送值“age”: enter image description here
要获得以下msgbox:
enter image description here

我尝试过这样的事情:

Public Sub SendPostData(ByVal site As String, ByVal message As String)

    Dim request As WebRequest
    request = WebRequest.Create(site)
    Dim response As WebResponse
    Dim postData As String = "message=" + message
    Dim data As Byte() = Encoding.UTF8.GetBytes(postData)


    request.Method = "POST"
    request.ContentType = "application/x-www-form-urlencoded"
    request.ContentLength = data.Length

    Dim stream As Stream = request.GetRequestStream()
    stream.Write(data, 0, data.Length)
    stream.Close()

    response = request.GetResponse()
    Dim sr As New StreamReader(response.GetResponseStream())


    MsgBox(sr.ReadToEnd)


End Sub


我得到了这个:

enter image description here


任何想法为什么我得到的而不是php文件中的3个可能消息之一? (“我18岁”,“我的名字是乔纳森”,或“我不知道”)? 请注意,我通常从一个html表单测试了php并且它工作正常,所以我想知道为什么它不能从该程序中运行。

5 个答案:

答案 0 :(得分:2)

你获得什么的原因是因为你已经声明FORM内容是“x-www-form-urlencoded”格式并且你已经使用了POST方法而且假设有什么在cookie(cookie数据)是您传递的信息,但在发送之前已由服务器编码。

我不确定你应该怎么做才能解码它。 或者你也可以使用GET而不是POST,如果只有TEXT而且没有SPECIAL符号或字符实际上需要编码,那么也许你可以使用另一种正确的内容类型来正确识别你的内容类型发送...

W3.org的以下页面是一本很好的阅读材料,它解释了各种零碎之间的差异,以及它们之间以及与服务器之间的互动方式。

表格 ( http://www.w3.org/TR/html401/interact/forms.html

如何处理表格( http://www.w3.org/TR/html401/interact/forms.html#h-17.13.3

答案 1 :(得分:2)

我使用WebClient来解决类似的问题,我需要在HTTP POST中使用参数。对于您的情况,如果您充分利用代码,这样的简化解决方案可能会有所帮助;假设您有一个文本框来捕获年龄,您可以使用此代码将其作为变量传递给URL;

Using client As New WebClient
        Dim postdata = client.UploadString(url, "age")
        MsgBox(postdata) 
End Using

答案 2 :(得分:1)

您是否考虑过这样做?

Option Strict On
Public Class Form1
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim Action As String = "http://www.mywebsite.com/myaction.php"
        PostMessage("submit", "Paul", Action)
    End Sub
    Sub PostMessage(ByVal Type As String, ByVal Value As String, ByVal Action As String)
        Dim TmpFile As String = My.Computer.FileSystem.SpecialDirectories.Temp & "\post.html"
        Using WB As New WebBrowser
            Dim HTML As String = _
                "<html><body>" &
                "<form method=""post"" action=""" & Action & """>" &
                "<input type=""" & Type & """ value=""" & Value & """ />" &
                "</form>" &
                "</body></html>"
            My.Computer.FileSystem.WriteAllText(TmpFile, HTML, False)
            WB.Navigate(TmpFile)
            Do : Application.DoEvents()
            Loop Until WB.ReadyState = WebBrowserReadyState.Complete
            WB.Document.GetElementById(Type).InvokeMember(Type)
            Do : Application.DoEvents()
            Loop Until WB.ReadyState = WebBrowserReadyState.Complete
        End Using
        My.Computer.FileSystem.DeleteFile(TmpFile)
    End Sub
End Class

答案 3 :(得分:1)

我是经验.net软件并且知道php也

从不使用httpwebrequest和httpwebresponse,&#39;因为两者都已过时

这里是正确的链接检查 http://msdn.microsoft.com/en-us/library/debx8sh9%28v=vs.110%29.aspx

它使用WebRequestWebResponse,在您的代码中添加引用System.NetSystem.Web

目标框架必须是4.0,4.5或更高,但不能选择包含客户端配置文件的名称

答案 4 :(得分:0)

只需更改此行:

Dim postData As String =“message =”+ message

为:

Dim postData As String =“message =”&amp;消息

使用“&amp;”而不是“+”

...问候