публиковать данные через httpWebRequest - PullRequest
13 голосов
/ 31 марта 2010

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

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

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

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

Ответы [ 5 ]

30 голосов
/ 31 марта 2010
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");
}
9 голосов
/ 31 марта 2010

Вы можете использовать эти имена в 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 голосов
/ 10 августа 2010

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

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

  1. Выполните запрос HttpWebRequest с методом GET для URL-адреса, на котором расположена страница с текстовыми полями
  2. Получить поток ответов HttpWebResponse
  3. Анализ страницы, содержащейся в потоке ответов, и получение имен текстовых полей. Для этой цели вы можете использовать HTML Agility Pack .
  4. Выполните запрос HttpWebRequest с методом POST, для которого тип контента установлен как «application / x-www-form-urlencoded» и пары ключ-значение в качестве контента.
0 голосов
/ 24 апреля 2012

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

0 голосов
/ 24 марта 2011

Я использую эту функцию для публикации данных. Но 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...