Home Page Home Page Tips & Tricks Come inviare dati eseguendo una richiesta HTTP

Come inviare dati eseguendo una richiesta HTTP


I Web Services sono ormai diventati una delle migliori soluzioni per trasferire dati attraverso il protocollo SOAP utilizzando lo standard XML.

Ma non è l’unico sistema, si ha la possibilità di trasferire dati utilizzando il protocollo HTTP effettuando una richiesta ad una risorsa web.

Le classi utilizzate sono la HttpWebRequest e la HttpWebResponse che sono presenti nel namespace System.Net.
Queste due classi ereditano rispettivamente da WebRequest e da WebResponse.
Infatti quando si esegue una richiesta non viene richiamato il costruttore della classe HttpWebRequest, ma viene utilizzato il metodo Create() della WebRequest.

C#
Codice .NET n°1
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(“<a target="_blank" href="http://www.test.com">http://www.test.com</a>&nbsp;”);


VB.NET
Codice .NET n°2
Dim request as HttpWebRequest = CType(WebRequest.Create(“<a target="_blank" href="http://www.test.com">http://www.test.com</a>&nbsp;”), HttWebRequest)


Bisogna "castare" il metodo alla classe HttpWebRequest perchè il metodo Create ritorna una WebRequest, essendo che quest’ultima viene ereditata non abbiamo problemi di conversione.
Il Framework solleva un’eccezione se è passato un'URI non valido (può essere sia http:// che https://)

Per poter passare dei dati via HTTP dobbiamo impostare il metodo che deve essere nel nostro caso "POST"[/].

request.Method = "POST"

Possiamo inoltre impostare il timeout, come anche impostare le credenziali per accedere alla risorsa web

Codice .NET n°3
request.Timeout = 10000
//imposto le credenziali di base
request.Credentials = CredentialCache.DefaultCredentials
//oppure assegno username e password e dominio
request.Credentials = new System.Net.NetworkCredential ("administrator", "password","domain");


Se per accedere alla risorsa passate per un server proxy si può impostare anche questo

request.Proxy = new WebProxy(addressProxy);

Dopo aver impostato le varie proprietà passiamo i dati alla risorsa Webattraverso il metodo GetRequestStream, che accetta un Array di Byte, per convertire il dato da passare utilizziamo la classe ASCIIEncoding (namespace System.Text) come abbiamo visto nel precedente tip:
http://www.dotnethell.it/tips/ConvertArrayBytes.aspx 

C#
Codice .NET n°4
string content ="Test Request Dotnethell"
ASCIIEncoding encoding=new ASCIIEncoding();
byte[] buffer =encoding.GetBytes(content);
// imposto il contenttype generico per la richiesta che in base al tipo di richiesta fatta si deve impostare il content type corretto(Es. text/xml, text/html ecc)
request.ContentType="application/x-www-form-urlencoded";
// imposto la lunghezza dei dati passati nella richiesta.
request.ContentLength=content.Length;
Stream newStream=request.GetRequestStream();
//scrivo nello stream
newStream.Write(buffer,0,buffer.Length);
newStream.Close();


VB.NET
Codice .NET n°5
Dim  content as String  ="Test Request Dotnethell"
Dim encoding as New ASCIIEncoding()
Dim buffer[] as Byte =encoding.GetBytes(content);
// imposto il contenttype generico per la richiesta che in base al tipo di richiesta fatta si deve impostare il content type corretto(Es. text/xml, text/html ecc)
request.ContentType="application/x-www-form-urlencoded"
// imposto la lunghezza dei dati passati nella richiesta.
request.ContentLength=content.Length;
Stream newStream=request.GetRequestStream();
//scrivo nello stream
newStream.Write(buffer,0,buffer.Length);
newStream.Close();


attraverso il metodo GetResponse recuperiamo la risposta:

C#
Codice .NET n°6
HttpWebResponse response = (HttpWebResponse)request.GetResponse();


VB.NET
Codice .NET n°7
 
Dim response as HttpWebResponse = CType(request.GetResponse,HttWebResponse)


Possiamo recuperare lo stream della risposta con il metodo GetResponseStream.

I metodi GetRequestStream, GetResponse e GetResponseStream possono essere utilizzati anche in modalità asincrona utilizzando i metodi Begin* e End*.

Come ultima cosa vi ricordo sempre di utilizzare il codice in un blocco try/catch e per verificare le eccezioni restituite potete usare la classe WebException che espone la proprietà Status che restituisce il tipo di eccezione che si è verificata.

Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5