web-dev-qa-db-ja.com

httpWebRequestを介してデータを投稿する

アプリケーション(デスクトップ)からHttpWebRequestオブジェクトを使用して外部Webサイトにデータを「投稿」し、HttpWebResponseオブジェクトを介してアプリケーションに応答を返す必要があります。しかし、データを投稿しているWebページには、動的な名前のテキストボックスがあります。

これらのテキストボックスの名前を取得してHttpWebResquestにデータを投稿するにはどうすればよいですか?

たとえば、ページをロードすると、テキストボックス名は次のようになりますU2FsdGVkX183MTQyNzE0MrhLOmUpqd3eL60xF19RmCwLlSiG5nC1H6wvtBDhjI3uM1krX_B8Fwcしかし、ページ名を更新すると、これに変更されますU2FsdGVkX182MjMwNjIzMPAtotst_q9PP9TETomXB453Mq3M3ZY5HQt70ZeyxbRb118Y8GQbgP8

提案をありがとう。

13
user304901
var request = WebRequest.Create("http://foo");
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
using (var writer = new StreamWriter(request.GetRequestStream()))
{
    writer.Write("field=value");
}
30
Darin Dimitrov

XPathでこれらの名前を付けることができます。そしてそれらを次のように使用します:

byte[]  data = new ASCIIEncoding().GetBytes("textBoxName1=blabla");
HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create("http://localhost/myservlet");
httpWebRequest.Method = "POST";
httpWebRequest.ContentType = "application/x-www-form-urlencoded";
httpWebRequest.ContentLength = data.Length;
Stream myStream = httpWebRequest.GetRequestStream();
myStream.Write(data,0,data.Length);
myStream.Close();
9
thelost

HttpWebRequestを含むページを取得し、対応するHttpWebResponseのコンテンツを解析して、テキストボックスの名前を見つける必要があるようです。次に、別のHttpWebRequestを使用して値をページに送信します。

したがって、基本的に、実行する必要があるのは次のとおりです。

  1. テキストボックスのあるページが配置されているURLにGETメソッドを使用してHttpWebRequestを発行します
  2. HttpWebResponseの応答ストリームを取得します
  3. 応答ストリームに含まれるページを解析し、テキストボックスの名前を取得します。この目的のために HTML Agility Pack を使用できます。
  4. POSTメソッドを使用して、コンテンツタイプを「application/x-www-form-urlencoded」に設定し、キーと値のペアをコンテンツとして使用して、HttpWebRequestを発行します。
2
Boris Mesetovic

問題の最初の部分:HTMLツリーが安定している可能性があります。次に、XPathを使用して関心のあるテキストボックスへの道を見つけることができます。 XmlReader、XDocument、Linqを使用して処理します。

0
Mr.Pe

この関数を使用してデータを投稿します。ただし、渡すURLは、たとえばそのようにフォーマットする必要があります

http://example.com/login.php?userid=myid&password=somepassword

Private Function GetHtmlFromUrl(ByVal url As String) As String

        If url.ToString() = vbNullString Then
            Throw New ArgumentNullException("url", "Parameter is null or empty")
        End If
        Dim html As String = vbNullString
        Dim request As HttpWebRequest = WebRequest.Create(url)
        request.ContentType = "Content-Type: application/x-www-form-urlencoded"
        request.Method = "POST"


        Try
            Dim response As HttpWebResponse = request.GetResponse()
            Dim reader As StreamReader = New StreamReader(response.GetResponseStream())
            html = Trim$(reader.ReadToEnd)
            GetHtmlFromUrl = html
        Catch ex As WebException
            GetHtmlFromUrl = ex.Message
        End Try

    End Function
0
Smith