通过httpWebRequest发布数据

时间:2010-03-31 06:48:00

标签: c# httpwebrequest

我需要使用一些数据“发布”到外部网站 来自我的应用程序(桌面)的HttpWebRequest对象并获得响应 通过HttpWebResponse对象返回我的应用程序。 但是我发布数据的网页上有带动态名称的文本框。

如何获取这些文本框的名称并在HttpWebResquest中发布数据?

例如,当我加载页面时,文本框名称就像这个U2FsdGVkX183MTQyNzE0MrhLOmUpqd3eL60xF19RmCwLlSiG5nC1H6wvtBDhjI3uM1krX_B8Fwc,但当我刷新页面名称时,更改为此U2FsdGVkX182MjMwNjIzMPAtotst_q9PP9TETomXB453Mq3M3ZY5HQt70ZeyxbRb118Y8GQbgP8

感谢您的任何建议。

5 个答案:

答案 0 :(得分:30)

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");
}

答案 1 :(得分:9)

您可以通过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();

答案 2 :(得分:2)

看起来您必须使用HttpWebRequest获取页面并解析相应HttpWebResponse的内容以找出文本框的名称。然后使用另一个HttpWebRequest将值提交给页面。

基本上,你需要做的是以下几点:

  1. 使用GET方法向带有文本框的页面所在的URL发出HttpWebRequest
  2. 获取HttpWebResponse的响应流
  3. 解析响应流中包含的页面并获取文本框的名称。您可以使用HTML Agility Pack来实现此目的。
  4. 使用POST方法发出HttpWebRequest,内容类型设置为“application / x-www-form-urlencoded”,键值对作为内容。

答案 3 :(得分:0)

我使用此功能发布数据。但是您传递的网址必须格式化为例如

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

答案 4 :(得分:0)

问题的第一部分: 也许HTML树是稳定的。然后你就可以通过XPath找到你的interrest文本框了。 使用XmlReader,XDocument和Linq来完成它。