Aller au contenu
  • Pas encore inscrit ?

    Pourquoi ne pas vous inscrire ? C'est simple, rapide et gratuit.
    Pour en savoir plus, lisez Les avantages de l'inscription... et la Charte de Zébulon.
    De plus, les messages que vous postez en tant qu'invité restent invisibles tant qu'un modérateur ne les a pas validés. Inscrivez-vous, ce sera un gain de temps pour tout le monde, vous, les helpeurs et les modérateurs ! :wink:

[VB6] Se loguer sur un site par POST


Messages recommandés

Posté(e)

Bien le bonjour tout le monde !

 

J'ai besoin d'un peu d'aide dans la réalisation d'un de mes programmes en Visual Basic 6. J'ai besoin de récuperer une information sur un site web (ça j'y arrive) mais pour le faire, il faut d'abord que je me logue sur ce site en demandant le login et le mot de passe à l'utilisateur (et ça par contre j'y arrive pas).

Pour info, pour se connecter au site, il faut remplir un formulaire par POST (ca aurait été trop simple de taper un simple : http://site.com/index.php?login=deejay&pass=fool :P ). Je connais le nom des variables à remplir qui sont "need_login_form_login" et "need_login_form_password" mais je ne vois pas comment les remplir.

Une autre info : je ne veux pas avoir à ouvrir un éventuel navigateur (j'ai juste besoin de récupérer le code source de la page obtenue après que l'utilisateur soit logué).

 

Merci d'avance pour votre aide.

Posté(e)

Le principe, c'est de se construire une chaine "variable1=valeur1&variable2=valeur2&variable3=etc" et de la passer en contenu de requête HTTP.

Tu construis ta chaine (a priori avec "need_login_form_login=deejay&need_login_form_password=fool"), tu ajoutes une entête HTTP "content-length" avec comme valeur la longueur de ta chaîne et tu files cette chaîne comme "corps" de requête.

 

Ce n'est qu'un principe général, si tu précisais avec quels composants tu effectues ton POST, on pourrait peut-être te filer les noms des objets / des méthodes à utiliser...

Posté(e)

Salut KewlCat !

Comme je l'ai dis dans mon premier message, le formulaire envoie les valeurs par POST, c'est à dire que les valeurs des variables ne sont pas envoyées par l'adresse de la page. Je ne peux donc pas faire comme tu me le dis. C'est justement ça qui me pose problème :/ . Je ne vois pas comment on fait pour envoyer des valeurs par POST car je ne connais pas très bien le principe. Je sais juste que pour envoyer le contenu d'un formulaire d'une page à une autre, il y a 2 méthodes : une qui l'envoie par l'adresse de la page (exemple : http://site.com/index.php?login=deejay&pass=fool ), et une autre qui l'envoie par POST (et donc les contenu des variables ne peuvent pas être vues par les internautes).

 

Ce n'est qu'un principe général, si tu précisais avec quels composants tu effectues ton POST, on pourrait peut-être te filer les noms des objets / des méthodes à utiliser...

Je ne vois pas ce que tu veux dire :s

Posté(e)

Si tu relis bien, je parle du "corps" de la requête, pas de l'URL demandée... (et donc d'un POST, pas d'un GET - "qui passe par l'adresse de la page" - )

 

Exemple de GET :

GET /chemin/page.html?var1=a&var2=b HTTP/1.0

Exemple de POST :

POST /chemin/page.html HTTP/1.0
Content-Type: application/x-www-form-urlencoded
Content-Length: 13

var1=a&var2=b

Le Content-Type n'est pas obligatoire, je crois (c'est celui par défaut pour un POST)

Après, il y a moyen de compliquer (utiliser HTTP/1.1, ajouter un USERAGENT, compresser avec gzip, etc. etc.)

Posté(e)

Je suis désolé :/ . Comme je t'ai dis, je ne connais pas très bien le fonctionnement du POST et je croyais que tu me parlais de passer les variables par l'adresse.

 

Pour en revenir à ça :

 

POST /chemin/page.html HTTP/1.0

Content-Type: application/x-www-form-urlencoded

Content-Length: 13

 

var1=a&var2=b

Je ne vois pas réellement comment l'inclure dans mon programme car j'utilise une fonction (dont je ne connais pas le fonctionnement) qui me permet de retourner le code source d'une page donné en paramètre que voici :

 

Option Explicit

Private Declare Function InternetOpen Lib "wininet.dll" Alias "InternetOpenA" (ByVal sAgent As String, ByVal lAccessType As Long, ByVal sProxyName As String, ByVal sProxyBypass As String, ByVal lFlags As Long) As Long
Private Declare Function InternetOpenUrl Lib "wininet.dll" Alias "InternetOpenUrlA" (ByVal hOpen As Long, ByVal sUrl As String, ByVal sHeaders As String, ByVal lLength As Long, ByVal lFlags As Long, ByVal lContext As Long) As Long
Private Declare Function InternetReadFile Lib "wininet.dll" (ByVal hFile As Long, ByVal sBuffer As String, ByVal lNumBytesToRead As Long, lNumberOfBytesRead As Long) As Integer
Private Declare Function InternetCloseHandle Lib "wininet.dll" (ByVal hInet As Long) As Integer

__________________________________________________________________

Public Function ReponseWeb(ByVal URL As String) As String
On Error Resume Next
Dim hOpen As Long
Dim hOpenUrl As Long
Dim bDoLoop As Boolean
Dim bRet As Boolean
Dim sReadBuffer As String * 2048
Dim lNumberOfBytesRead As Long
Dim sBuffer As String
 hOpen = InternetOpen("VB OpenUrl", 0, vbNullString, vbNullString, 0)
 hOpenUrl = InternetOpenUrl(hOpen, URL, vbNullString, 0, &H80000000, 0)
 bDoLoop = True
 While bDoLoop
   sReadBuffer = vbNullString
   bRet = InternetReadFile(hOpenUrl, sReadBuffer, Len(sReadBuffer), lNumberOfBytesRead)
   sBuffer = sBuffer & Left(sReadBuffer, lNumberOfBytesRead)
   If Not CBool(lNumberOfBytesRead) Then bDoLoop = False
 Wend
 If hOpenUrl <> 0 Then InternetCloseHandle (hOpenUrl)
 If hOpen <> 0 Then InternetCloseHandle (hOpen)
 ReponseWeb = sBuffer
End Function

J'arrive très bien à récupérer le code source de la page de loggin mais je voudrai le code source de la page qu'on obtient une fois loggé. Et je ne vois pas comment faire pour introduire ton exemple de POST dans mon programme :s .

 

Merci pour ta rapidité de réponse :P .

Posté(e)

Donc tu utilises wininet.dll. C'est ce que je voulais savoir ;-)

Je crois qu'il faut appeler HttpSendRequest() pour faire un POST.

N'ayant pas la doc complète sous la main, je peux me tromper...

Posté(e)

Je viens de faire quelques recherches sur google sur la fonction HttpSendRequest() que tu m'as parlé. Et j'ai trouvé une page très intéressante qui fait exactement ce dont j'ai besoin (du moins je pense car à la fin, la fonction retourne le contenu de la page chargée) : http://docvb.free.fr/apidetail.php?idapi=209

 

Le problème, c'est que je ne vois pas exactement comment fonctionne les paramètres de la fonction :/ . Je vais donc faire un bref résumé de ce que je pense avoir trouvé. Si vous savez comment fonctionne les autres paramètres, n'hésitez pas à me le dire.

 

Public Function UrlPost(stURL As String, stPostData As String, _
               stStatusCode As String, stStatusText As String, _
               Optional lgInternet As INTERNET_DEF = INTERNET_DEFAULT_HTTP_PORT, _
               Optional stUser As String = vbNullString, _
               Optional stPass As String = vbNullString) As String

stURL : C'est l'URL de la page contenant le formulaire de login

stPostDate : Je ne vois pas à quoi ça sert

stStatusCode : Je ne vois pas à quoi ça sert

lgInternet : Je ne vois pas à quoi ça sert (mais bon c'est facultatif...)

stUser : Je pense que c'est là qu'on donne le login

stPass : Et là le mot de passe pour pouvoir se logger

 

Merci de bien vouloir éclairer ma lanterne :P .

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.
Remarque : votre message nécessitera l’approbation d’un modérateur avant de pouvoir être visible.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

  • En ligne récemment   0 membre est en ligne

    • Aucun utilisateur enregistré regarde cette page.
×
×
  • Créer...