我有这个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并且它工作正常,所以我想知道为什么它不能从该程序中运行。
答案 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
它使用WebRequest
和WebResponse
,在您的代码中添加引用System.Net
和System.Web
目标框架必须是4.0,4.5或更高,但不能选择包含客户端配置文件的名称
答案 4 :(得分:0)
只需更改此行:
Dim postData As String =“message =”+ message
为:
Dim postData As String =“message =”&amp;消息
使用“&amp;”而不是“+”
...问候