Torna al Thread

[CODE] Imports System Imports System.Collections.Generic Imports System.Collections.Specialized Imports System.IO Imports System.Net Imports System.Text Imports System.Web ''' <summary> ''' Esegue un modulo HTTP (Form HTML) in modalità POST e GET. ''' </summary> Public Class HttpPost ''' <summary> ''' Modalità di esecuzione del modulo. ''' </summary> Public Enum PostTypes ''' <summary> ''' HTTP GET. ''' </summary> [GET] ''' <summary> ''' HTTP POST. ''' </summary> POST End Enum ' OGGETTI PRIVATI Private _url As String Private _values As NameValueCollection Private _type As PostTypes Private _encoding As Encoding ''' <summary> ''' Esegue un modulo HTTP (Form HTML) in modalità POST e GET. ''' </summary> Public Sub New() ' init default Me._url = String.Empty Me._type = PostTypes.[GET] Me._values = New NameValueCollection() Me._encoding = Text.Encoding.UTF8 End Sub ''' <summary> ''' Esegue un modulo in modalità POST e GET. ''' </summary> ''' <param name="url">URL del modulo da eseguire.</param> Public Sub New(ByVal url As String) Me.New() Me._url = url End Sub ''' <summary> ''' Esegue un modulo in modalità POST e GET. ''' </summary> ''' <param name="url">URL del modulo da eseguire.</param> ''' <param name="values">Collezione dei valori del modulo.</param> Public Sub New(ByVal url As String, ByVal values As NameValueCollection) Me.New(url) Me._values = values End Sub ''' <summary> ''' Esegue un modulo in modalità POST e GET. ''' </summary> ''' <param name="url">URL del modulo da eseguire.</param> ''' <param name="values">Collezione dei valori del modulo.</param> ''' <param name="encoding">Codifica del set di caratteri.</param> Public Sub New(ByVal url As String, ByVal values As NameValueCollection, ByVal encoding As Encoding) Me.New(url, values) Me._encoding = encoding End Sub ''' <summary> ''' Legge o imposta la URL del modulo da eseguire. ''' </summary> Public Property Url() As String Get Return (Me._url) End Get Set(ByVal value As String) Me._url = value End Set End Property ''' <summary> ''' Legge o imposta la collezione dei valori del modulo. ''' </summary> Public Property Values() As NameValueCollection Get Return (Me._values) End Get Set(ByVal value As NameValueCollection) Me._values = value End Set End Property ''' <summary> ''' Legge o imposta la modalità di esecuzione del modulo. ''' </summary> Public Property Type() As PostTypes Get Return (Me._type) End Get Set(ByVal value As PostTypes) Me._type = value End Set End Property ''' <summary> ''' Legge o imposta il tipo di codifica del set di caratteri. ''' </summary> Public Property Encoding() As Encoding Get Return (Me._encoding) End Get Set(ByVal value As Encoding) Me._encoding = value End Set End Property ''' <summary> ''' Esegue il modulo HTTP. ''' </summary> ''' <returns>String, codice HTML restituito dall'esecuzione del modulo.</returns> Public Function Post() As String Dim parameters As New StringBuilder() For i As Integer = 0 To Me._values.Count - 1 Me.AddItem(parameters, Me._values.GetKey(i), Me._values(i)) Next Return (PostData(Me._url, parameters.ToString(), Text.Encoding.UTF8)) End Function ''' <summary> ''' Esegue il modulo HTTP. ''' </summary> ''' <param name="url">URL del modulo da eseguire.</param> ''' <returns>String, codice HTML restituito dall'esecuzione del modulo.</returns> Public Function Post(ByVal url As String) As String Me._url = url Return (Me.Post()) End Function ''' <summary> ''' Esegue il modulo HTTP. ''' </summary> ''' <param name="url">URL del modulo da eseguire.</param> ''' <param name="values">Collezione dei valori del modulo.</param> ''' <returns>String, codice HTML restituito dall'esecuzione del modulo.</returns> Public Function Post(ByVal url As String, ByVal values As NameValueCollection) As String Me._url = url Me._values = values Return (Me.Post()) End Function ''' <summary> ''' Esegue il modulo HTTP. ''' </summary> ''' <param name="postDatas">Valori del modulo, in formato UrlEncoded.</param> ''' <param name="url">URL del modulo da eseguire.</param> ''' <param name="encoding">Codifica del set di caratteri.</param> ''' <returns>String, codice HTML restituito dall'esecuzione del modulo.</returns> Private Function PostData(ByVal url As String, ByVal postDatas As String, ByVal encoding As System.Text.Encoding) As String Dim uri As Uri Dim request As HttpWebRequest = Nothing Select Case Me._type Case PostTypes.POST uri = New Uri(url) request = DirectCast(WebRequest.Create(uri), HttpWebRequest) request.Method = "POST" request.ContentType = "application/x-www-form-urlencoded" request.ContentLength = postDatas.Length Using writeStream As Stream = request.GetRequestStream() Dim bytes As Byte() = encoding.GetBytes(postDatas) writeStream.Write(bytes, 0, bytes.Length) End Using Exit Select Case PostTypes.[GET] uri = New Uri(url + "?" + postDatas) request = DirectCast(WebRequest.Create(uri), HttpWebRequest) request.Method = "GET" Exit Select End Select Dim ret As String = String.Empty Using response As HttpWebResponse = DirectCast(request.GetResponse(), HttpWebResponse) Using responseStream As Stream = response.GetResponseStream() Using readStream As New StreamReader(responseStream, encoding) ret = readStream.ReadToEnd() End Using End Using End Using Return ret End Function ''' <summary> ''' Codifica i parametri e li concatena in una stringa formattata per l'esecuzione del modulo. ''' </summary> ''' <param name="baseRequest">Stringa formattata contenente i parameteri codificati in precedenza.</param> ''' <param name="dataItem">Valore da codificare.</param> Private Sub AddItem(ByRef baseRequest As StringBuilder, ByVal key As String, ByVal dataItem As String) If baseRequest Is Nothing Then baseRequest = New StringBuilder() End If baseRequest.Append((IIf((baseRequest.Length <> 0), "&", String.Empty)) + key + "=" + HttpUtility.UrlEncode(dataItem)) End Sub End Class [/CODE]
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5