2010-03-31 2 views
13

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

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

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

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

ответ

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

, но я не знаю название поля заранее. thats проблема ???? имена полей не являются жестко запрограммированными, они меняются всякий раз, когда загрузка или обновление страницы. – user304901

+1

Открой еще один вопрос, так как он полностью оффтопик в ЭТОМ вопросе (не означает, что он вне темы на SO вообще) – jalgames

2

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

Поэтому в основном то, что вам нужно сделать, это следующее:

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

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

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

Смежные вопросы