2010-03-31 2 views
13

Ich muß „Post“ einige Daten auf eine externe Website mit HttpWebRequest Objekt aus meiner Anwendung (Desktop) und eine Antwort zurück in meine Anwendung durch HttpWebResponse Objekt erhalten. Aber die Webseite, auf der Daten gepostet werden, hat Textboxen mit dynamischen Namen.Post-Daten durch httpwebrequest

Wie bekomme ich den Namen dieser Textfelder und Daten in HttpWebResquest?

Zum Beispiel, wenn ich die Seite laden, ist der Name des Textfelds wie folgt U2FsdGVkX183MTQyNzE0MrhLOmUpqd3eL60xF19RmCwLlSiG5nC1H6wvtBDhjI3uM1krX_B8Fwc, aber wenn ich den Seitennamen aktualisiere, ändern Sie diese U2FsdGVkX182MjMwNjIzMPAtotst_q9PP9TETomXB453Mq3M3ZY5HQt70ZeyxbRb118Y8GQbgP8.

Vielen Dank für Anregungen.

Antwort

9

Sie könnten diese Namen von XPath z. und Benutzer sie mag:

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

aber ich kenne den Feldnamen nicht im Voraus. das ist das Problem ???? Die Feldnamen sind nicht fest codiert, sie ändern sich, wenn die Seite geladen oder aktualisiert wird. – user304901

+1

Öffnen Sie eine andere Frage dafür, da es in dieser Frage völlig offtopic ist (bedeutet nicht, dass es im Allgemeinen nicht auf SO Thema ist) – jalgames

2

Es sieht aus wie Sie haben wird die Seite mit einem HttpWebRequest zu erhalten und analysieren den Inhalt der HttpWebResponse entspricht die Namen der Textfelder zu erfahren. Dann senden Sie die Werte an die Seite mit einem anderen HttpWebRequest.

Also im Grunde, was müssen Sie tun, ist die folgende:

  1. Ausgabe ein HttpWebRequest mit GET-Methode auf die URL, wo die Seite mit Textfeldern befindet sich
  2. Holen Sie sich das Antwortstream von der HttpWebResponse
  3. Analysieren Sie die im Antwortstream enthaltene Seite und ermitteln Sie die Namen der Textfelder. Sie können für diesen Zweck verwenden.
  4. Geben Sie eine HttpWebRequest mit POST-Methode aus, wobei der Inhaltstyp auf "application/x-www-form-urlencoded" und Schlüssel/Wert-Paare als Inhalt festgelegt ist.
0

Ich verwende diese Funktion, um Daten zu posten. Aber die URL Sie hat zu passieren als solche formatiert zum Beispiel

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

Erster Teil des Problems: Vielleicht ist der HTML-Baum ist stabil. Dann können Sie mit XPath zum Textfeld Ihres Interests gelangen. Verwenden Sie XmlReader, XDocument und Linq, um es durchzugehen.