Come pubblicare dati su URL specifici utilizzando WebClient in C #

Devo utilizzare “HTTP Post” con WebClient per pubblicare alcuni dati su un URL specifico che ho.

Ora, so che questo può essere ottenuto con WebRequest, ma per alcuni motivi voglio invece usare WebClient. È ansible? Se è così, qualcuno può mostrarmi qualche esempio o indicarmi la giusta direzione?

Ho appena trovato la soluzione e sì è stato più facile di quanto pensassi 🙂

quindi ecco la soluzione:

string URI = "http://www.myurl.com/post.php"; string myParameters = "param1=value1&param2=value2&param3=value3"; using (WebClient wc = new WebClient()) { wc.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded"; string HtmlResult = wc.UploadString(URI, myParameters); } 

funziona come un fascino 🙂

Esiste un metodo integrato chiamato UploadValues che può inviare HTTP POST (o qualsiasi tipo di metodi HTTP) E gestisce la costruzione del corpo della richiesta (concatenando i parametri con “&” ed eseguendo l’escaping dei caratteri mediante la codifica dell’URL) in formato dati di formato corretto:

 using(WebClient client = new WebClient()) { var reqparm = new System.Collections.Specialized.NameValueCollection(); reqparm.Add("param1", " kinds & of = ? strings"); reqparm.Add("param2", "escaping is already handled"); byte[] responsebytes = client.UploadValues("http://localhost", "POST", reqparm); string responsebody = Encoding.UTF8.GetString(responsebytes); } 

Utilizzando WebClient.UploadString o WebClient.UploadData è ansible inviare facilmente i dati POST al server. Mostrerò un esempio usando UploadData, dato che UploadString è usato nello stesso modo di DownloadString.

 byte[] bret = client.UploadData("http://www.website.com/post.php", "POST", System.Text.Encoding.ASCII.GetBytes("field1=value1&field2=value2") ); string sret = System.Text.Encoding.ASCII.GetString(bret); 

altro: http://www.daveamenta.com/2008-05/c-webclient-usage/

 //Making a POST request using WebClient. Function() { WebClient wc = new WebClient(); var URI = new Uri("http://your_uri_goes_here"); //If any encoding is needed. wc.Headers["Content-Type"] = "application/x-www-form-urlencoded"; //Or any other encoding type. //If any key needed wc.Headers["KEY"] = "Your_Key_Goes_Here"; wc.UploadStringCompleted += new UploadStringCompletedEventHandler(wc_UploadStringCompleted); wc.UploadStringAsync(URI,"POST","Data_To_Be_sent"); } void wc__UploadStringCompleted(object sender, UploadStringCompletedEventArgs e) { try { MessageBox.Show(e.Result); //e.result fetches you the response against your POST request. } catch(Exception exc) { MessageBox.Show(exc.ToString()); } } 
 string URI = "site.com/mail.php"; using (WebClient client = new WebClient()) { System.Collections.Specialized.NameValueCollection postData = new System.Collections.Specialized.NameValueCollection() { { "to", emailTo }, { "subject", currentSubject }, { "body", currentBody } }; string pagesource = Encoding.UTF8.GetString(client.UploadValues(URI, postData)); } 
 string URI = "http://www.myurl.com/post.php"; string myParameters = "param1=value1&param2=value2&param3=value3" 

può essere semplificato come

http://www.myurl.com/post.php?param1=value1&param2=value2&param3=value3 .

Funziona sempre. Ho trovato che l’originale funziona a intermittenza.