Отправлять данные через httpWebRequest

Мне нужно "отправить" некоторые данные на внешний веб-сайт, используя HttpWebRequest объект из моего приложения (рабочий стол) и получить ответ обратно в мое приложение через объект HttpWebResponse. Но веб-страница, на которой я размещаю данные, имеет текстовые поля с динамическими именами.

Как я могу получить имя этих текстовых полей и опубликовать данные в HttpWebResquest?

Например, когда я загружаю страницу, имя текстового поля похоже на это U2FsdGVkX183MTQyNzE0MrhLOmUpqd3eL60xF19RmCwLlSiG5nC1H6wvtBDhjI3uM1krX_B8Fwc, но когда я обновляю имя страницы, перехожу к этому U2FsdGVkX182MjMwNjIzMPAtotst_q9PP9TETomXB453Mq3M3ZY5HQt70ZeyxbRb118Y8GQbgP8.

Спасибо за любые предложения.

Ответы

Ответ 1

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

Ответ 2

Вы можете использовать эти имена 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();

Ответ 3

Похоже, вам нужно будет получить страницу с HttpWebRequest и проанализировать содержимое соответствующего HttpWebResponse, чтобы узнать имена текстовых полей. Затем вы отправляете значения на страницу с помощью другого HttpWebRequest.

Итак, в основном, вам нужно сделать следующее:

  • Выполните HttpWebRequest с помощью метода GET для URL-адреса, где расположена страница с текстовыми полями.
  • Получить поток ответов HttpWebResponse
  • Проведите анализ страницы, содержащейся в потоке ответов, и получите имена текстовых полей. Вы можете использовать HTML Agility Pack для этой цели.
  • Выполните запрос HttpWebRequest с помощью метода POST с типом контента, который устанавливается как "application/x-www-form-urlencoded" и пары ключ-значение в качестве содержимого.

Ответ 4

Я использую эту функцию для публикации данных. Но 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

Ответ 5

Первая часть вашей проблемы: Возможно, дерево HTML является стабильным. Затем вы можете найти свой путь к текстовому полю вашего interrest с XPath. Используйте XmlReader, XDocument и Linq, чтобы просмотреть его.