IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Authentification sur un site (GET & POST requests)


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2013
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 98
    Par défaut Authentification sur un site (GET & POST requests)
    Bien le bonsoir a tous et à toutes !
    Et merci d'être tombé sur mon post ça fais toujours plaisir !

    Tout d'abord je tiens a préciser que j'ai un tout petit niveau de programmation. (VB.Net)
    Je commence sans plus tarder sur mon soucis ^^

    Bon je suis actuellement entrain de "programmer" un petit tool qui es sensé se connecter sur un site, et récupérer des informations sur ce site.
    J'ai donc installé "HTTP Header Live" sur Firefox et j'ai "sniffé" les requêtes web.

    Et au final, il y as une première requête POST à effectuer, qui prend pour paramètres les identifiants de connexion du site.
    J'ai donc finis par faire comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    Dim Uri As New Uri("https://gameforge.com/api/v1/auth/thin/sessions")
    Dim data = Encoding.UTF8.GetBytes("{" & Chr(34) & "identity" & Chr(34) & ":" & Chr(34) & "email@hotmail.fr" & Chr(34) & "," & Chr(34) & "password" & Chr(34) & ":" & Chr(34) & "passsss" & Chr(34) & "," & Chr(34) & "locale" & Chr(34) & ":" & Chr(34) & "fr_FR" & Chr(34) & "," & Chr(34) & "gfLang" & Chr(34) & ":" & Chr(34) & "fr" & Chr(34) & "," & Chr(34) & "platformGameId" & Chr(34) & ":" & Chr(34) & "07b3e4d5-f37e-440b-9aa5-b249121a6bfa" & Chr(34) & "," & Chr(34) & "gameEnvironmentId" & Chr(34) & ":" & Chr(34) & "5c71b04b-a0c3-4792-be4f-81f97c25d8a8" & Chr(34) & "," & Chr(34) & "autoGameAccountCreation" & Chr(34) & ":false}")
    Dim result_post = SendRequest(Uri, data, "application/json", "POST")
     
    MsgBox(result_post.ToString())
     
     
    Private Function SendRequest(uri As Uri, jsonDataBytes As Byte(), contentType As String, method As String) As String
            Dim response As String
            Dim request As HttpWebRequest
            request = WebRequest.Create(uri)
            request.ContentLength = jsonDataBytes.Length
            request.ContentType = contentType
            request.Method = method
     
            Using requestStream = request.GetRequestStream
                requestStream.Write(jsonDataBytes, 0, jsonDataBytes.Length)
                requestStream.Close()
     
                Using responseStream = request.GetResponse.GetResponseStream
                    Using reader As New StreamReader(responseStream)
                        response = reader.ReadToEnd()
                    End Using
                End Using
            End Using
     
            Return response
        End Function
    Et cela fonctionne car il me renvoie une erreur 403 si les identifiants sont incorrects, et s'ils sont corrects il me renvois :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {"token":"c81ce5ef-0594-41cd-bcc4-41b4d37b6436","isPlatformLogin":true,"isGameAccountMigrated":false,"platformUserId":"1bfd8c6a-c492-4e36-9a2a-3f8515f4033e","isGameAccountCreated":false,"hasUnmigratedGameAccounts":false}

    Donc de la je continue de "sniffer" ma liste de requêtes, et j'essaie de faire la deuxième requête, qu'il y as juste après la première POST, une requête GET sur "https://lobby.ikariam.gameforge.com/api/users/me".
    Je l'effectues donc de cette manière :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    MsgBox(Get_request("https://lobby.ikariam.gameforge.com/api/users/me"))
     
     
    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
            Try
                Dim hwebrequest As System.Net.HttpWebRequest = System.Net.HttpWebRequest.Create(url)
                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
                reader = New IO.StreamReader(hwebresponse.GetResponseStream)
                Dim res As String = ""
                res = reader.ReadToEnd()
                reader.Close()
                hwebresponse.Close()
                Return res
            Catch ex As Exception
                Return ex.ToString
            End Try
        End Function
    Mais le serveur me renvoie une erreur 403 (interdit) comme si je n'étais pas identifié par exemple ou autre chose... Alors es-que c'est une histoire de cookies ou autre chose.. c'est ça que je voulais vous demander...

    Pour être plus précis je "sniff" a partir de la page : https://lobby.ikariam.gameforge.com/fr_FR/ qui es la page de connexion d'un jeu en ligne.
    Dans le but de s’identifier et récupérer le nombre de points que je possède et les afficher sur le tool)


    Voilà j'espère ne pas enfreindre les règles du forum en postant ceci, et j'espère que quelqu'un auras du temps pour moi.. car je suppose que si vous voulez m'aider il faudras vous inscrire sur le jeu et simuler une connexion probablement.
    En tout cas merci beaucoup a vous qui avez lu, et a l'équipe developpez
    ++

  2. #2
    Membre expérimenté
    Homme Profil pro
    IT Manager
    Inscrit en
    Janvier 2018
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : IT Manager
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2018
    Messages : 220
    Par défaut
    Hello,

    1ere chose :
    Le format de l'url quand tu fais le WebRequest.Create doit être URI et non string.

    Donc tu ajoutes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Dim uri As New Uri(url)
    avant le WebRequest.Create, qui devient WebRequest.Create(uri) du coup.

    2e truc, essaies de passer les credentials comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
                Dim encoded As String = System.Convert.ToBase64String(System.Text.Encoding.GetEncoding("ISO-8859-1").GetBytes(username + ":" + password))
                request.Headers.Add("Authorization", "Basic " + encoded)
    Et enfin, je ne vois nulle part la définition de la méthode de la requête...

    Quand j'ai ce genre de bug :
    - je tente d’exécuter la requête manuellement avec Postman, pour voir le résultat et il est surtout un peu plus bavard sur les erreurs, en fonction de comment l'API interrogée répond...
    - j’exécute en debug pas à pas pour voir sur quelle ligne la requête se crashe, et vérifier l'état des variables/objets...

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2013
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 98
    Par défaut
    Salut thovan, et merci de t'être arrêté sur le topic c'est cool

    Alors pour la déclaration de la variable Uri c'est fait, après je suis directement allé installer Postman, c'est un bon logiciel et bien fait, c'est cool ça devrais beaucoup m'aider !
    Seulement voila je bloque déjà :

    Quand j'essaie de faire la première requête POST sur "https://gameforge.com/api/v1/auth/thin/sessions" avec Postman il me renvoie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    {
        "error": {
            "message": "Forbidden"
        }
    }
    Donc déjà j'arrive pas a faire une requête POST sur Postman avec mes identifiants...
    Ensuite j'ai essayé de faire une requete GET sur "https://lobby.ikariam.gameforge.com/api/users/me" mais Postman me renvoie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    {
        "error": "not logged in"
    }
    Donc je suppose qu'il faut passer par tokens ou cookies ou quelque chose comme ça, avant même de regarder le code vb.net, il faudrais peut-être déjà que j'arrive a effectuer correctement mes requêtes déjà, mais je sais pas trop ce qui bloque la...


    Merci encore
    Cordialement
    ++

  4. #4
    Membre expérimenté
    Homme Profil pro
    IT Manager
    Inscrit en
    Janvier 2018
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : IT Manager
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2018
    Messages : 220
    Par défaut
    Voilà,
    Postman te donne déjà une info cruciale : est-ce que ton code est en défaut ou non....

    L'erreur forbidden est liée au login/mot de passe...
    Ils sont probablement non renseignés ou erronés.

    Tu peux les renseigner dans PostMan, dans l'onglet Authorization, juste sous l'URL de la requête...

    Le not logged in cache probablement la même chose...

    EDIT : je vois dans les URL que c'est une API gameforge... tu devrais peut-être fouiller sa documentation sur le net...

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2013
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 98
    Par défaut
    Re, thovan et merci beaucoup!
    J'ai finalement finis par réussir, il me faut une requête POST, et 4 requêtes GET, avec cookie et tokens, mais vu que la fonction Get_Request fonctionne pas je suis pas encore sortis d’affaire^^
    Mais un gros pas en avant déjà!!
    Tu saura me dire ce qui cloche avec la fonction Get_Request ?

    Merci encore thovan
    ++

  6. #6
    Membre expérimenté
    Homme Profil pro
    IT Manager
    Inscrit en
    Janvier 2018
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : IT Manager
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2018
    Messages : 220
    Par défaut
    Quel est ton problème?
    Toujours l'erreur "not logged in" ??

    C'est assez explicite....
    Tu n'es pas loggé ! :p

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2016] Authentification sur un site web
    Par Hexa82 dans le forum Macros et VBA Excel
    Réponses: 311
    Dernier message: 08/02/2016, 14h34
  2. Authentification sur un site internet
    Par jack-no dans le forum R
    Réponses: 4
    Dernier message: 13/11/2014, 12h53
  3. [PHP 5.2] Authentification sur deux sites
    Par deglingo592003 dans le forum Langage
    Réponses: 8
    Dernier message: 08/09/2009, 13h00
  4. [web] authentification sur un site via VBA
    Par cafeine dans le forum Contribuez
    Réponses: 0
    Dernier message: 18/04/2008, 16h47
  5. Authentification sur un site
    Par johnson95 dans le forum Langage
    Réponses: 3
    Dernier message: 08/03/2008, 17h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo