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つのメッセージの1つではなく、なぜそれが表示されるのか考えてみてください。(「私は18歳です」、「私の名前はジョナサンです」、または「わかりません」)?私は通常htmlフォームからphpをテストし、それが機能したことに注意してください。それで、なぜそれがプログラムから機能しないのか疑問に思います。

4

5 に答える 5

3

取得しているものを取得している理由は、FORMコンテンツが「x-www-form-urlencoded」形式であり、POSTメソッドを使用しており、Cookieに含まれているものは何でもあると想定しているためです( cookie data)は通過した情報ですが、送信前にサーバーによってエンコードされています。

方法はわかりませんが、エンコードを解除できるはずです。または、POSTではなくGETを使用することもできます。また、TEXTのみがあり、実際にエンコードが必要なSPECIAL記号や文字がない場合は、現在のコンテンツのタイプを正しく識別する別の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

私は.netソフトウェアを経験しており、phpも知っています

httpwebrequestとhttpwebresponseを使用しないでください。'cozはどちらも古くなっています。

これが適切なリンクチェックです http://msdn.microsoft.com/en-us/library/debx8sh9%28v=vs.110%29.aspx

を使用WebRequestし、参照をWebResponse追加し、コードにSystem.NetSystem.Web

また、ターゲットフレームワークは4.0、4.5以上である必要がありますが、クライアントプロファイルを含む名前を選択しないでください

于 2014-05-19T09:00:49.593 に答える
2

WebClientを使用して、HTTPPOSTでパラメーターを使用する必要がある同様の問題を解決しました。あなたの場合、このような単純化されたソリューションは、コードをうまくいじる場合に役立つ可能性があります。年齢をキャプチャするテキストボックスがあると仮定すると、このコードを使用して、それを変数としてURLに渡すことができます。

Using client As New WebClient
        Dim postdata = client.UploadString(url, "age")
        MsgBox(postdata) 
End Using
于 2015-03-12T18:22:26.130 に答える
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 に答える