User Tag List

Resultados 1 al 7 de 7

Tema: Peticion GET a pelo

  1. #1

    Fecha de ingreso
    Sep 2006
    Ubicación
    Malaga
    Mensajes
    6,126
    Mencionado
    37 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    1,012
    Agradecer Thanks Received 
    1,061
    Thanked in
    Agradecido 746 veces en [ARG:2 UNDEFINED] posts

    Question Peticion GET a pelo

    A ver, estoy intentando hacer peticiones a un servidor, pero no consigo que me devuelva nada, al menos ya no me da el error 400.

    Si meto esta url en el navegador:
    api.polygon.io/v2/aggs/ticker/C:EURUSD/range/1/minute/2021-06-02/2021-06-03?unadjusted=true&sort=asc&limit=5000&apiKey=*

    Me devuelve:
    {"status":"ERROR","request_id":"9372a31d354d5e008c 159e40ec947cee","error":"Unknown API Key"}
    Es normal porque la clave esta mal, poniendo mi clave me devuelve un chorro de datos.

    Ahora haciendo desde C++.
    Abro un socket a api.polygon.io:80, después escribo lo siguiente:
    GET /v2/aggs/ticker/C:EURUSD/range/1/minute/2021-06-02/2021-06-03?unadjusted=true&sort=asc&limit=5000&apiKey=*
    HTTP/1.1
    Host: api.polygon.io
    Connection: close

    Que se supone que es lo que hace el navegador, pero me responde con lo siguiente:


    <!DOCTYPE html>
    <html>


    <head>
    <title>Polygon.io 404 Not Found</title>
    <link rel="icon" href="images/favicon.png">
    </head>


    <style>
    body {
    font-family: Arial, Helvetica, sans-serif;
    text-align: center;
    }


    h1 {
    font-size: 2rem;
    font-weight: 400;
    line-height: 2.5rem;
    margin: 1rem;
    color: #363636;
    }


    p {
    font-size: 1rem;
    line-height: 1.5rem;
    margin: 1rem;
    color: #6b6b6b;
    }


    a {
    color: #5F5CFF;
    }


    .container {
    margin: 160px auto;
    max-width: 440px;
    padding: 16px;
    }


    .logo {
    display: block;
    /* padding-right: 32px; */
    padding-bottom: 24px;
    margin: 0 auto;
    }
    </style>


    <body>


    <div class="container">


    <img class="logo"
    src="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGl uZz0iVVRGLTgiPz4KPHN2ZyB3aWR0aD0iMjc4cHgiIGhlaWdod D0iNDc4cHgiIHZpZXdCb3g9IjAgMCAyNzggNDc4IiB2ZXJzaW9 uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL 3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE 5OTkveGxpbmsiPgogICAgPCEtLSBHZW5lcmF0b3I6IFNrZXRja CA1NS4yICg3ODE4MSkgLSBodHRwczovL3NrZXRjaGFwcC5jb20 gLS0+CiAgICA8dGl0bGU+cG9seWdvbkxvZ288L3RpdGxlPgogI CAgPGRlc2M+Q3JlYXRlZCB3aXRoIFNrZXRjaC48L2Rlc2M+CiA gICA8ZyBpZD0iUGFnZS0xIiBzdHJva2U9Im5vbmUiIHN0cm9rZ S13aWR0aD0iMSIgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmV ub2RkIj4KICAgICAgICA8ZyBpZD0iQXJ0Ym9hcmQiIHRyYW5zZ m9ybT0idHJhbnNsYXRlKC0xMjg3LjAwMDAwMCwgLTQyMy4wMDA wMDApIiBmaWxsPSIjMEEwQTBBIiBmaWxsLXJ1bGU9Im5vbnplc m8iPgogICAgICAgICAgICA8ZyBpZD0icG9seWdvbkxvZ28iIHR yYW5zZm9ybT0idHJhbnNsYXRlKDEyODcuMDAwMDAwLCA0MjMuM DAwMDAwKSI+CiAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMjU zLjg4MDY5OSwxNDAuOTY1ODUzIEwxNDMuODMyMzE3LDMxLjAxN DQ1ODcgTDg3LjQzODg1MDUsMjYxLjAyNzE3IEwxMjkuNzc5ODQ 0LDM5My4zNDcxMSBMMTI5Ljc3OTg0NCwyOTEuOTc2MDUxIEwyN TMuODgwNjk5LDE0MC45NjU4NTMgWiBNMjE4LjU4NzQ5OCwyMTI uMDA3MzY5IEwxNDcuNjE0MjM5LDI5OC4zNzAwNzcgTDE0Ny42M TQyMzksNDAxLjI5MjIwOCBMMjE4LjU4NzQ5OCwyMTIuMDA3MzY 5IFogTTEyMi44ODgwNzMsNDEuNTQyMDA2MiBMMjIuNTM4NjU2N ywxNDEuMTgyMDk3IEw3NS4wNTA4OTczLDIzNi42NTYwNzIgTDE yMi44ODgwNzMsNDEuNTQyMDA2MiBaIE02OS41NjY2NDY4LDI2M y42OTU3ODQgTDAuNDI5NDk2MTIzLDEzNy45OTU1OTUgTDEzOC4 3MTY1ODIsMC42ODU5OTk2MDIgTDI3Ny44Mjk1NzIsMTM5LjY3N jM4NiBMMjUyLjk0ODM5OSwxNzEuMTY4MzI2IEwxMzguMDMwNjE 1LDQ3Ny42NTI2OTMgTDY5LjU2NjY0NjgsMjYzLjY5NTc4NCBaI iBpZD0iQ29tYmluZWQtU2hhcGUiPjwvcGF0aD4KICAgICAgICA gICAgPC9nPgogICAgICAgIDwvZz4KICAgIDwvZz4KPC9zdmc+"
    width="96px" height="auto" />


    <h1>404 Not Found</h1>
    <p><strong>This route does not exist.</strong></p>
    <p>Apologies for any inconvenience, we can't seem to find the page you are looking for.</p>
    <!-- <p>For more information email <a href="mailto:support@polygon.io">support@polygon.i o</a></p> -->
    <hr>
    <p>Go back to our website <a href="https://polygon.io">polygon.io</a></p>
    <p>Go to API Docs <a href="https://polygon.io/docs/">Polygon API Docs</a></p>


    </div>


    </body>


    </html>


    ¿Que me falta poner al hacer el GET ....? He estado buscando por internet pero no doy con la tecla.

    Gracias de antebraso
    No es lo mismo tener diez años de experiencia, que tener un año de experiencia diez veces.

  2. #2

    Fecha de ingreso
    Sep 2006
    Ubicación
    Malaga
    Mensajes
    6,126
    Mencionado
    37 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    1,012
    Agradecer Thanks Received 
    1,061
    Thanked in
    Agradecido 746 veces en [ARG:2 UNDEFINED] posts
    Si le quito la primera barra teniendo GET v2/... me da un 400 bad request...

    Esto de ir dando palos de ciego... le he añadido mas tonterías al get como el campo User-Agent, Acept pero por ahi no van los tiros porque me dice que no encuentra la pagina, pero si hago un copy&paste y la pongo en el navegador si que va... WTF
    No es lo mismo tener diez años de experiencia, que tener un año de experiencia diez veces.

  3. #3

    Fecha de ingreso
    Mar 2007
    Ubicación
    Barna
    Mensajes
    9,650
    Mencionado
    82 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    209
    Agradecer Thanks Received 
    1,221
    Thanked in
    Agradecido 632 veces en [ARG:2 UNDEFINED] posts
    Fíjate que si preguntas al puerto 80, te responde con una redirección obligatoria al protocolo https. Esa redirección la gestiona el navegador automáticamente, pero la gestiona también tu programa C++?

    Código:
    $ telnet api.polygon.io 80
    
    (...)
    
    GET /v2/aggs/ticker/C:EURUSD/range/1/minute/2021-06-02/2021-06-03?unadjusted=true&sort=asc&limit=5000&apiKey=* HTTP/1.1
    Host: api.polygon.io
    Connection: close
    
    HTTP/1.1 308 Permanent Redirect
    Server: nginx/1.19.2
    Date: Fri, 04 Jun 2021 08:33:33 GMT
    Content-Type: text/html
    Content-Length: 171
    Connection: keep-alive
    Location: https://api.polygon.io/v2/aggs/ticker/C:EURUSD/range/1/minute/2021-06-02/2021-06-03?unadjusted=true&sort=asc&limit=5000&apiKey=*
    
    <html>
    <head><title>308 Permanent Redirect</title></head>
    <body>
    <center><h1>308 Permanent Redirect</h1></center>
    <hr><center>nginx/1.19.2</center>
    </body>
    </html>
    ^CConnection closed by foreign host.
    Si haces la petición directa al https da el error "401", que creo que es lo que esperas

    Código:
    $ openssl s_client -connect api.polygon.io:443
    
    (....)
    
    GET /v2/aggs/ticker/C:EURUSD/range/1/minute/2021-06-02/2021-06-03?unadjusted=true&sort=asc&limit=5000&apiKey=* HTTP/1.1
    Host: api.polygon.io
    Connection: close
    
    HTTP/1.1 401 Unauthorized
    Server: nginx/1.19.2
    Date: Fri, 04 Jun 2021 08:35:28 GMT
    Content-Type: application/json
    Content-Length: 92
    Connection: close
    X-Request-Id: 407ec9cbd22bb3109cae43147072b989
    Strict-Transport-Security: max-age=15724800; includeSubDomains
    
    {"status":"ERROR","request_id":"407ec9cbd22bb3109cae43147072b989","error":"Unknown API Key"}closed
    Una opción para que veas todas las peticiones y headers de cada una de ellas, incluyendo las redirecciones, es curl:

    Código:
    curl -Lsvo - 'http://api.polygon.io/v2/aggs/ticker/C:EURUSD/range/1/minute/2021-06-02/2021-06-03?unadjusted=true&sort=asc&limit=5000&apiKey=*'
    (primero verás la petición al 80 y el anuncio de redirección)
    (luego la gestión de la conexión ssl al 443)
    (y finalmente la petición al 443)
    -----Actualizado-----

    Pero estoy pensando... ese error 404 no será porque la función de enviar que estés usando en C++ formatea de alguna manera la cadena "/v2/aggs/ticker/C:EURUSD/range/1/minute/2021-06-02/2021-06-03?unadjusted=true&sort=asc&limit=5000&apiKey=*" ? es decir, que cambie algún caracter o algo.
    Última edición por juanvvc; 04/06/2021 a las 10:46
    "Todo es absolutamente falso, salvo alguna cosa"

  4. El siguiente usuario agradece a juanvvc este mensaje:

    swapd0 (04/06/2021)

  5. #4

    Fecha de ingreso
    Sep 2006
    Ubicación
    Malaga
    Mensajes
    6,126
    Mencionado
    37 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    1,012
    Agradecer Thanks Received 
    1,061
    Thanked in
    Agradecido 746 veces en [ARG:2 UNDEFINED] posts
    No tengo telnet... cosas de apple, eso si, yo estaba "abriendo" un socket con ssl en el puerto 80 XD, internet no es mi campo. Pongo abriendo entre comillas porque mirando la documentación y los ejemplos lo estaba haciendo mal. Lo raro es que me dejase hacer lo que estaba haciendo, pero usar las boost (asio en este caso) hay veces que son un dolor de muelas.

    A ver si lo cambio, pero veo que es muy distinto una conexión http normal a una https.

    Lo de que me cambiara algo lo he pensado pero estoy metiendo el get en un std::string y después mando el buffer, antes de enviarlo lo saco por la consola y es lo que he copiado mas arriba.
    No es lo mismo tener diez años de experiencia, que tener un año de experiencia diez veces.

  6. #5

    Fecha de ingreso
    Mar 2007
    Ubicación
    Barna
    Mensajes
    9,650
    Mencionado
    82 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    209
    Agradecer Thanks Received 
    1,221
    Thanked in
    Agradecido 632 veces en [ARG:2 UNDEFINED] posts
    https hace sus cosas por debajo antes y después de enviar, pero si estás usando una librerías tú ni te enteras. Según tu punto de vista, tú envías solo este texto y ya está. Es solo que la librería https que estés usando inicia sesión, negocia cifrado, ejecuta D-H y cifra. Pero para ti es transparente lo que haga, tú simplemente crees que estás enviando solamente esto. Si estás usando una librerías C++ para conexiones y no solo sockets "a pelo", prueba a conectarte con https al puerto 443 y no al 80

    Código:
    GET /v2/aggs/ticker/C:EURUSD/range/1/minute/2021-06-02/2021-06-03?unadjusted=true&sort=asc&limit=5000&apiKey=* HTTP/1.1
    Host: api.polygon.io
    Connection: close
    -----Actualizado-----

    Cita Iniciado por swapd0 Ver mensaje
    No tengo telnet... cosas de apple, eso si, yo estaba "abriendo" un socket con ssl en el puerto 80
    Ah. Puede que si intentas iniciar una conexión "SSL" (actualízate, ahora se llama TLS) en el puerto 80 el servidor se haga un lío y devuelva 404. Pero me extrañaría.

    Sobre telnet en macos, obviamente, brew install telnet
    Última edición por juanvvc; 04/06/2021 a las 13:23
    "Todo es absolutamente falso, salvo alguna cosa"

  7. El siguiente usuario agradece a juanvvc este mensaje:

    swapd0 (04/06/2021)

  8. #6

    Fecha de ingreso
    Sep 2006
    Ubicación
    Malaga
    Mensajes
    6,126
    Mencionado
    37 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    1,012
    Agradecer Thanks Received 
    1,061
    Thanked in
    Agradecido 746 veces en [ARG:2 UNDEFINED] posts
    Por fin, ya he conseguido que funcione, con las boost::asio tenia que hacer todo mas a mano y no habia forma, al final he usado la librería boost::beast que tiene classes para hacer peticiones de get, post y cosas de esas.

    Ahora toca limpiar el código que esta hecho una guarreria y despues a pasear el fichero json que me mandan.
    No es lo mismo tener diez años de experiencia, que tener un año de experiencia diez veces.

  9. #7

    Fecha de ingreso
    Mar 2007
    Ubicación
    Barna
    Mensajes
    9,650
    Mencionado
    82 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    209
    Agradecer Thanks Received 
    1,221
    Thanked in
    Agradecido 632 veces en [ARG:2 UNDEFINED] posts
    Sí, es que usar sockets a pelo está bien como ejercicio cuando aprendes, pero para cualquier cosa seria es mejor confiar en librerías.
    "Todo es absolutamente falso, salvo alguna cosa"

Permisos de publicación

  • No puedes crear nuevos temas
  • No puedes responder temas
  • No puedes subir archivos adjuntos
  • No puedes editar tus mensajes
  •