アプリケーション(デスクトップ)からHttpWebRequest
オブジェクトを使用して外部Webサイトにデータを「投稿」し、HttpWebResponse
オブジェクトを介してアプリケーションに応答を返す必要があります。しかし、データを投稿しているWebページには、動的な名前のテキストボックスがあります。
これらのテキストボックスの名前を取得してHttpWebResquest
にデータを投稿するにはどうすればよいですか?
たとえば、ページをロードすると、テキストボックス名は次のようになりますU2FsdGVkX183MTQyNzE0MrhLOmUpqd3eL60xF19RmCwLlSiG5nC1H6wvtBDhjI3uM1krX_B8Fwc
しかし、ページ名を更新すると、これに変更されますU2FsdGVkX182MjMwNjIzMPAtotst_q9PP9TETomXB453Mq3M3ZY5HQt70ZeyxbRb118Y8GQbgP8
。
提案をありがとう。
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");
}
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();
HttpWebRequestを含むページを取得し、対応するHttpWebResponseのコンテンツを解析して、テキストボックスの名前を見つける必要があるようです。次に、別のHttpWebRequestを使用して値をページに送信します。
したがって、基本的に、実行する必要があるのは次のとおりです。
問題の最初の部分:HTMLツリーが安定している可能性があります。次に、XPathを使用して関心のあるテキストボックスへの道を見つけることができます。 XmlReader、XDocument、Linqを使用して処理します。
この関数を使用してデータを投稿します。ただし、渡す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