Requete http get / post

Soyez le premier à donner votre avis sur cette source.

Snippet vu 53 634 fois - Téléchargée 29 fois


Contenu du snippet

Suite à une question dans le forum qui m'a poussé à ecrire un code que je pensais avoir déja poster ici, je me permet d'ajouter ce simple petit code.
J'avais effectivement deja poster la source "requete http via proxy, recuperer la source d'une page html" mais celle ci etait plus destiné à montrer l'interet du proxy et ne s'arretait que sur la methode GET, et le changement de nom serait devenu compliqué, bref, voila mon explication à une eventuelle critique concernant un doublon.
Cette fois ci les deux methodes les plus courantes (POST et GET) sont presentées.
Update : Gestion des authentification par .htaccess

Update 2 : Ajout de la gestion des cookies (pourtant indispensable, où était-elle??), ainsi que des proxy. Les arguments optionels attendus par les deux méthodes devienent nombreux, du fait que celles ci sont extraites d'une classe me simplifiant l'utilisations des requêtes HTTP, dans laquelle j'ai défini de nombreuses surcharges de ces méthodes.
J'hesite à mettre cette classe à la place des deux simple méthodes, ce qui augmenterais considérablement le code censé être très simple.

Source / Exemple :


Private Function Get_request(ByVal url As String, Optional ByVal cookies As String = "", Optional ByVal proxy As String = Nothing, Optional ByVal proxyport As Integer = Nothing, Optional ByVal timeout As Integer = 30000, Optional ByVal login As String = "", Optional ByVal pass As String = "") As String
        Dim reader As IO.StreamReader 'on crée un objet streamreader 
        Try
            Dim hwebrequest As System.Net.HttpWebRequest = System.Net.HttpWebRequest.Create(url) 'on crée la requete web 
            hwebrequest.Timeout = timeout
            If proxy <> "" Then
                Dim hproxy As WebProxy
                hproxy = New WebProxy(proxy, proxyport)
                WebRequest.DefaultWebProxy = hproxy
            End If
            If login <> "" Then
                Dim hcredential As New System.Net.NetworkCredential(login, pass)
                hwebrequest.Credentials = hcredential
            End If
            If cookies <> "" Then
                hwebrequest.CookieContainer = New CookieContainer
                hwebrequest.CookieContainer.SetCookies(New Uri(url.Substring(0, url.IndexOf("/", 8))), cookies)
            End If
            Dim hwebresponse As System.Net.HttpWebResponse = hwebrequest.GetResponse 'on crée un objet de reponse a notre requete 
            reader = New IO.StreamReader(hwebresponse.GetResponseStream) 'on redefini notre streamreader avec la reponse à la requete en argument 
            Dim res As String = ""
            res = reader.ReadToEnd() 'on renvoie l'ensemble du resultat 
            reader.Close() 'on ferme l'objet 
            hwebresponse.Close()
            Return res
        Catch ex As Exception
            Return ex.ToString
        End Try
    End Function

    Private Function Post_request(ByVal url As String, ByVal data As String, Optional ByVal cookies As String = "", Optional ByVal proxy As String = Nothing, Optional ByVal proxyport As Integer = Nothing, Optional ByVal timeout As Integer = 30000, Optional ByVal login As String = "", Optional ByVal pass As String = "") As String
        Dim reader As IO.StreamReader
        Dim writer As IO.StreamWriter
        Dim res As String = ""
        Try
            Dim hwebrequest As System.Net.HttpWebRequest = System.Net.HttpWebRequest.Create(url) ' on crée la requete web à partir de l'url
            If proxy <> "" Then
                Dim hproxy As WebProxy
                hproxy = New WebProxy(proxy, proxyport)
                WebRequest.DefaultWebProxy = hproxy
            End If
            If login <> "" Then
                Dim hcredential As New System.Net.NetworkCredential(login, pass)
                hwebrequest.Credentials = hcredential
            End If
            If cookies <> "" Then
                hwebrequest.CookieContainer = New CookieContainer
                hwebrequest.CookieContainer.SetCookies(New Uri(url.Substring(0, url.IndexOf("/", 8))), cookies)
            End If
            hwebrequest.Method = "POST" 'on defini la methode à utiliser
            hwebrequest.ContentType = "application/x-www-form-urlencoded" 'on defini le type de contenu de la requete
            hwebrequest.ContentLength = data.Length 'on defini la taille des données à envoyé
            writer = New IO.StreamWriter(hwebrequest.GetRequestStream) 'on crée un objet streamwriter qui va nous permettre d'envoyer nos données
            writer.Write(data) 'on ecrit les données
            writer.Close() 'on ferme l'objet streamwriter
            Dim hwebresponse As System.Net.HttpWebResponse = hwebrequest.GetResponse 'on crée un objet de reponse a notre requete 
            reader = New IO.StreamReader(hwebresponse.GetResponseStream) 'on redefini notre streamreader avec la reponse à la requete en argument 
            res = reader.ReadToEnd() 'on renvoie l'ensemble du resultat 
            reader.Close() 'on ferme l'objet 
            Return res
        Catch ex As Exception
            Return ex.Message.ToString
        End Try
    End Function

Conclusion :


ammeliorations? 'suis preneur.

A voir également

Ajouter un commentaire

Commentaires

Messages postés
97
Date d'inscription
vendredi 22 octobre 1999
Statut
Membre
Dernière intervention
13 juin 2016
1
Juste pour information :
cela fonctionne très bien avec Visual Basic Express 2010 sur un site en accès HTTP, parcontre j'ai une erreur avec un accès HTTPS "impossible d'établir une relation de confiance pour la canal sécurité SSL/TLS".

Je n'ai pas encore cherché à résoudre ce souci...
Messages postés
116
Date d'inscription
lundi 15 décembre 2003
Statut
Membre
Dernière intervention
8 novembre 2011
1
Solution trouvée, si d'autres ont ce souci:
J'avais ajouté une ligne dans mon projet:
hwebrequest.SendChunked=true.
J'ai mis à false et ça roule.

Par contre, j'ai beau mettre :
Dim readstr = New IO.StreamReader(hwebresponse.GetResponseStream, System.Text.Encoding.Default) ou tout autre encodage, j'ai toujours un ? dans un losange.
Coté PHP, que je fasse :
header('Content-Type: text/html; charset=ISO-8859-1');
ou
header('Content-Type: text/html; charset=UTF-8');

Ca ne change strictement rien :-(

Je reste bloqué sur de *ù$^$ù*$^*ùù de truc d'accents ça saoule xD
Messages postés
116
Date d'inscription
lundi 15 décembre 2003
Statut
Membre
Dernière intervention
8 novembre 2011
1
Hello !
De retour avec la version 2010 de vb.net express, j'essaye de reprendre un vieux projet que je réalisais sous 2008 ou 2005 je sais plus. bref.
La ligne "Dim hwebresponse As System.Net.HttpWebResponse = hwebrequest.GetResponse 'on crée un objet de reponse a notre requete " me rapporte une erreur:
"L'exception ProtocolViolationException s'est produite: Content-Length ou l'encodage mémorisé ne peut pas être défini pour une opération ne permettant pas l'écriture de données."

WTF ?_?
Messages postés
1
Date d'inscription
jeudi 16 décembre 2010
Statut
Membre
Dernière intervention
14 juin 2011

salut,
j'ai essayé ce code pour se connecter sur facebook et ca n'a pas marché :(
un petit help svp
Messages postés
9
Date d'inscription
lundi 30 août 2004
Statut
Membre
Dernière intervention
8 mai 2011

Je pense tout simplement qu'il faut avoir un compte sur ce site pour faire une recherche.
Il te faut donc envoyer tes identifiants au site en les passant en paramètres dans ton code vb.
Après le site reconnaitera ta session et tu pourras faire des recherches depuis ton programme vb.
Afficher les 74 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.