3

我有这个 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”: 在此处输入图像描述
要获得以下 msgbox:
在此处输入图像描述

我尝试了类似这样的操作:

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


我得到了这个:

在此处输入图像描述


知道为什么我得到它而不是 php 文件中的 3 条可能消息之一吗?(“我 18 岁”、“我叫乔纳森”或“我不知道”)?请注意,我通常从 html 表单测试 php 并且它工作,所以我想知道为什么它不能从程序工作。

4

5 回答 5

3

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

我不知道怎么做,但你也应该能够取消编码。或者,您可以使用 GET 而不是 POST,并且如果只有 TEXT 而没有实际需要编码的特殊符号或字符,那么也许您可以使用不同的 CONTENT-TYPE 来正确识别您的内容类型发送...

W3.org 上的以下页面是很好的阅读材料,它解释了各种零碎之间的差异以及它们如何相互交互以及与服务器交互。

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

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

于 2013-01-10T02:36:40.963 回答
2

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

Using client As New WebClient
        Dim postdata = client.UploadString(url, "age")
        MsgBox(postdata) 
End Using
于 2015-03-12T18:22:26.130 回答
2

我是 .net 软件的经验者,也知道 php

永远不要使用 httpwebrequest 和 httpwebresponse,因为两者都过时了

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

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

并且目标框架必须是 4.0、4.5 或更高版本,但不能选择包含 Client Profile 的名称

于 2014-05-19T09:00:49.593 回答
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
于 2013-01-09T02:16:47.113 回答
0

你将不得不改变这一行:

Dim postData As String = "message=" + message

至:

Dim postData As String = "message=" & message

使用"&"而不是"+"

问候...

于 2016-06-14T04:50:08.530 回答