J'essai de faire une POST request pour avoir l api key pour passer au Websocket mais je reçois error 1020.

Comment je peut le bypasser ?

Je suis deubtant dans le domain du creation des bots et connexion au serveur des jeux donc tout conseil est tres fort apprécié, mercii!!

    class Program {
        private static readonly HttpClient httpClient = new HttpClient();
        private static string username = "USERNAME_HERE";
        private static string password = "PASSWORD_HERE";
        static async Task Main(string[] args) {
            var result = await Post();
            Console.WriteLine(result);
        }

        static async Task<string> Post() {
            var values = new Dictionary<string, string> {
                { "login", username },
                { "password", password },
                { "long_life_token", "false" }
            };
            var content = new FormUrlEncodedContent(values);
            var response = await httpClient.PostAsync("https://haapi.ankama.com/json/Ankama/v5/Api/CreateApiKey", content);
            return await response.Content.ReadAsStringAsync();
        }
    }

Tu fais la requete depuis un VPS/VPN ?

    reben

    Tu fais la requete depuis un VPS/VPN ?

    Non, depuis mon propre IP

    Regarde au niveau des requêtes de ankama, le header etc il doit y avoir une sécurité

      reben

      Regarde au niveau des requêtes de ankama, le header etc il doit y avoir une sécurité

      Ah oui peut etre, j'ai essayé de copier la meme header (user-agent etc) mais ne fonctionne toujours pas. par contre il y a une valeur de cookie dans le header, tu pense que c'est la raison?

      n'a pas trouvé de moyen de le creer, j'ai essaye valeur aléatoire mais ne marche pas.

      (désolé pour ma mauvais français, ce n'est pas ma premiere langue :/ )

      EDIT: il semble que le cookie soit en fait lié au problème, car il s'appelle __cf_bm, ce qui signifie Cloudflare Bot Management.

      8 jours plus tard

      Cloudflare n'est pas le problème apparement... Je suis confronté au même problème, donc je récupère le set-cookie lors de ma première requête à

      https://proxyconnection.touch.dofus.com/config.json
      (fait à l'arrache):

      request.get(ENDPOINTS.CONFIG, (error, response, body) => {
          let cookie = `__cf${JSON.stringify(response.headers['set-cookie']).split('__cf')[1]..split(';')[0]}`
          console.log(cookie)
          ...

      retourne

      __cf_bm=62a56e7fbfad4af2941a5fcb9ae73e5b56ffbd06-1622388975-1800-AXqai+CxEWnqccfDa8zz4VFifXeeLBS1L/cyL+SGHJL2IoZf72fNqtn22uC1jFPn1Gf4uL+hS794UP1wIz8U2kGiZdylLGaCd1e+OlzsqbwQ

      Je le passe ensuite dans les headers quand je récupère l'apikey et le token:

      request.post({
          headers: {'content-type' : 'application/x-www-form-urlencoded', 'cookie': cookie},
          url: ENDPOINTS.API_KEY,
          body: `login=${username}&password=${password}&long_life_token=false`
          ...

      Pourtant j'obtiens toujours ce code d'erreur 1020 en réponse...

      Quelqu'un a une piste?

      • KR3 a répondu à ça.

        Hollymolly

        Cloudflare n'est pas le problème apparement... Je suis confronté au même problème, donc je récupère le set-cookie lors de ma première requête à

        https://proxyconnection.touch.dofus.com/config.json
        (fait à l'arrache):

        request.get(ENDPOINTS.CONFIG, (error, response, body) => {
            let cookie = `__cf${JSON.stringify(response.headers['set-cookie']).split('__cf')[1]..split(';')[0]}`
            console.log(cookie)
            ...

        retourne

        __cf_bm=62a56e7fbfad4af2941a5fcb9ae73e5b56ffbd06-1622388975-1800-AXqai+CxEWnqccfDa8zz4VFifXeeLBS1L/cyL+SGHJL2IoZf72fNqtn22uC1jFPn1Gf4uL+hS794UP1wIz8U2kGiZdylLGaCd1e+OlzsqbwQ

        Je le passe ensuite dans les headers quand je récupère l'apikey et le token:

        request.post({
            headers: {'content-type' : 'application/x-www-form-urlencoded', 'cookie': cookie},
            url: ENDPOINTS.API_KEY,
            body: `login=${username}&password=${password}&long_life_token=false`
            ...

        Pourtant j'obtiens toujours ce code d'erreur 1020 en réponse...

        Quelqu'un a une piste?

        Il te manque des cookies non ?

        Le header cookie se décompose comme ça:

        cookie:
        NOTIFS=%5B%7B%22id%22%3A4qdsqsts%22%3A1621344857%7D%5D;
        cf_clearance=c0f5e60221ef43aae5c8wxcwxcw<0255356dc9-16d861889-0-1-615959d9.5cf81e.36580d39-150;
        __cf_bm=86257a1d849b8fbfc4eb29fbwxcw1331c1cwcxwxx5-1622550757-1800-Ac354v48OcqB1YKk2pCtIJC/S1TNjPZRgqfW/SYrN1PfnL3TbXpv2mAYlp+/WAMYSPdrjP1yPCz7VkhdTzIytbcof8hmp+/ycctSFynN3Ll0; 
        AWSALBTG=x0ATAJDUflXJ2wP03LqYpim12zs4ooQ9dh1H8TEG5B1dKRNZ5MEO/6KSo+DsOfwLdsNPkmxoTX8KGT45gDoFq4mymTDAki0iQSho4OniDT+7CFhu0t1YF5cwo4yZRQcZNM2zEzTAfa84EK+F2WEcpI352qJTb5WDBAe2KWnnMSDP;
        AWSALBTGCORS=x0ATAJDUflXJ2EG5B1dKRNZ5MEO/6KSo+DsOfwL+sNPkmxoTX8KGT4dDoFq4mymTDAki0iQSho4OniDT+7CFhu0t1YF5cwo4yZRQcZNM2zEda84EK+F2WEcpI352qJTb5WDBAe2KWnnMSDP;
        AWSALB=rdXF+779ITDS2EAPzWtL46fSFkRNwRcREYzIFRdTTIYz6fgIYjY1l7eAEnSDnmQLJw5myW+UgDoEz3tK+YcyJVuUDALIsy367a3bJS3rvpuS8L5EseFtW/Q84xDF;
        AWSALBCORS=rdXF+779ITDS2EAPzWsfSFkRNwRcREYzIFRdTTIYz6fgIYjY1deAEnSDnmQLJw5myW+UgDoEz3tK+YcyJVuUDALIsy367a3bJS3rvpuS8L5ESeFtW/Q84xDF

        @KR3 Effectivement le header cookie avait été mal géré de mon côté mais après avoir corrigé tout ça je prend toujours une erreur 1020. :(

        J'utilise ma propre IP qui fonctionne à la fois sur Lindo et sur les sites d'ank@ma. Voilà ma requête si sa peut aider ?

        
        //variables:
        //HAAPI_ENDPOINTS.API_KEY = 'https://haapi.ankama.com/json/Ankama/v5/Api/CreateApiKey'
        //payload = `login=${username}&password=${password}&long_life_token=false`
        //cookie = le bon headers['set-cookie'] lors de la requête à 'https://proxyconnection.touch.dofus.com/config.json'
        //key = null
        ...
        await request(
            {
                headers:
                {
                    'content-type': 'application/x-www-form-urlencoded',
                    'content-length': Buffer.byteLength(payload),
                    'user-agent': 'Mozilla/5.0 (Linux; Android 7.0; Nexus 5X Build/NRD90M; wv) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.140 Mobile Safari/537.36',
                    'accept': 'application/json',
                    'accept-language': 'en-US',
                    'origin': 'null',
                    'cookie': cookie
                },
                uri:HAAPI_ENDPOINTS.API_KEY,
                method: 'POST',
                body: payload
            },
            (error, response, body) =>
            {
                if (error) return false
                key = JSON.parse(body).key
            })
        )}
        

        Essaie avec https://www.npmjs.com/package/got plutôt

        Mais avant essaie avec un partage de co 4g par exemple, si ça fonctionne tu sais que ça vient de ton IP, sinon ça vient de la manière dont tu fais ta requête.

        1020 signifie que "Un client ou un navigateur est bloqué par les règles de pare-feu d'un client Cloudflare. "

        Sa avance, je me retrouve avec un status code 403 donc le cookie est bien corrigé et la lib request est bien dépassée. J'imagine que le 403 vient de mon user-agent. Merci pour ton aide, voilà la requête et l'erreur si sa peut aider:

        const get_apikey = async (cookie, username, password) =>
        {
            let apikey  = null
            let payload = `login=${username}&password=${password}&long_life_token=false`
        
            try {
                const response = await got.post(haapi_endpoints.get_apikey, {
                    headers: {
                        'content-type': 'text/plain;charset=UTF-8',
                        'content-length': Buffer.byteLength(payload),
                        'user-agent': 'Mozilla/5.0 (Linux; Android 7.0; Nexus 5X Build/NRD90M; wv) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.140 Mobile Safari/537.36',
                        'accept': 'application/json',
                        'accept-language': 'en-US',
                        'origin': 'null',
                        'cookie': cookie
                    },
                    body: payload
                })
        
                apikey = JSON.parse(response.body).key
            } catch (error) {
                console.log('error:', error)
            }
        
            return apikey
        }
        
        =============
        == CONSOLE ==
        =============
        
        error: HTTPError: Response code 403 (Forbidden)
            at Request.<anonymous> (D:\Projets\...\got\dist\source\as-promise\index.js:117:42)
            at processTicksAndRejections (internal/process/task_queues.js:93:5) {
          code: undefined,
          timings: {
            start: 1622602319697,
            socket: 1622602319698,
            lookup: 1622602319712,
            connect: 1622602319734,
            secureConnect: 1622602319784,
            upload: 1622602319785,
            response: 1622602319812,
            end: 1622602319817,
            error: undefined,
            abort: undefined,
            phases: {
              wait: 1,
              dns: 14,
              tcp: 22,
              tls: 50,
              request: 1,
              firstByte: 27,
              download: 5,
              total: 120
            }
          }
        }
        

        EDIT: Sa vient pas de l'user-agent, j'ai égalementé testé avec 2 partage 4G différents et rien n'y fait. J'avoue avoir du mal à comprendre d'où peut venir le problème, voici un pastebin de mon code au complet pour ceux qui peuvent me dire où je foire: DTouch Haapi Connection - Pastebin.com

        Je m'étais fais une app avec got pour créer des comptes, je faisais mes requêtes simplement avec le header suivant :

        "Content-Type": "application/json",

        Il n'y a pas de captcha à résoudre pour accéder à tes pages dans haapi_endpoints ?

        car moi j'en avais un pour l'endpoint createguest et validateguest

        Si il y en a pour

        haapi_endpoints.get_apikey
        et
        haapi_endpoints.get_token
        normalement. Honnêtement je pense que je vais passer à autre chose car je comprend réellement pas l'origine du problème. Même en utilisant puppeteer comme intermédiaire pour faire mes requête et bypass Cloudflare je ne parviens pas à obtenir mon token et poursuivre la connexion...

        Pour got il faut rajouter cookie-jar. Ainsi que trouver les bons ciphers et sigalgs