User Tag List

Resultados 1 al 13 de 13

Tema: Peticion GET a pelo

  1. #1

    Fecha de ingreso
    Sep 2006
    Ubicación
    Malaga
    Mensajes
    7,561
    Mencionado
    47 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    1,668
    Agradecer Thanks Received 
    1,922
    Thanked in
    Agradecido 1,289 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.


    It is an undisputed truth that the Atari ST gets the best out of coders. No dedicated hardware, just the CPU and a frame buffer! Some call it Spartan, others name it Power Without The Price, and a select few say `challenge accepted'! --- by spkr from smfx

  2. #2

    Fecha de ingreso
    Sep 2006
    Ubicación
    Malaga
    Mensajes
    7,561
    Mencionado
    47 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    1,668
    Agradecer Thanks Received 
    1,922
    Thanked in
    Agradecido 1,289 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.


    It is an undisputed truth that the Atari ST gets the best out of coders. No dedicated hardware, just the CPU and a frame buffer! Some call it Spartan, others name it Power Without The Price, and a select few say `challenge accepted'! --- by spkr from smfx

  3. #3

    Fecha de ingreso
    Mar 2007
    Ubicación
    Barna
    Mensajes
    10,341
    Mencionado
    93 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    368
    Agradecer Thanks Received 
    1,791
    Thanked in
    Agradecido 944 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 11: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
    7,561
    Mencionado
    47 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    1,668
    Agradecer Thanks Received 
    1,922
    Thanked in
    Agradecido 1,289 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.


    It is an undisputed truth that the Atari ST gets the best out of coders. No dedicated hardware, just the CPU and a frame buffer! Some call it Spartan, others name it Power Without The Price, and a select few say `challenge accepted'! --- by spkr from smfx

  6. #5

    Fecha de ingreso
    Mar 2007
    Ubicación
    Barna
    Mensajes
    10,341
    Mencionado
    93 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    368
    Agradecer Thanks Received 
    1,791
    Thanked in
    Agradecido 944 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 14: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
    7,561
    Mencionado
    47 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    1,668
    Agradecer Thanks Received 
    1,922
    Thanked in
    Agradecido 1,289 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.


    It is an undisputed truth that the Atari ST gets the best out of coders. No dedicated hardware, just the CPU and a frame buffer! Some call it Spartan, others name it Power Without The Price, and a select few say `challenge accepted'! --- by spkr from smfx

  9. #7

    Fecha de ingreso
    Mar 2007
    Ubicación
    Barna
    Mensajes
    10,341
    Mencionado
    93 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    368
    Agradecer Thanks Received 
    1,791
    Thanked in
    Agradecido 944 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"

  10. #8

    Fecha de ingreso
    Sep 2006
    Ubicación
    Malaga
    Mensajes
    7,561
    Mencionado
    47 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    1,668
    Agradecer Thanks Received 
    1,922
    Thanked in
    Agradecido 1,289 veces en [ARG:2 UNDEFINED] posts
    Vuelvo a la carga.

    Tengo una clase para hacer consultas al api.polygon.io y funciona, pero si hago la peticion para los datos de hoy me devuelve un DELAYED, eso pasa tambien si le pido los datos para toda esta semana, al parecer no le gusta que le pidas mas datos de los que tiene y te devuelve un DELAYED, ok.

    Lo que no entiendo es que si pido los datos de hoy no va, pero si copio la consulta al navegador si que me devuelve los datos de hoy. WTF, no se que mete el navegador que hace que funcione y mi consulta no.
    No es lo mismo tener diez años de experiencia, que tener un año de experiencia diez veces.


    It is an undisputed truth that the Atari ST gets the best out of coders. No dedicated hardware, just the CPU and a frame buffer! Some call it Spartan, others name it Power Without The Price, and a select few say `challenge accepted'! --- by spkr from smfx

  11. #9

    Fecha de ingreso
    Sep 2006
    Ubicación
    Malaga
    Mensajes
    7,561
    Mencionado
    47 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    1,668
    Agradecer Thanks Received 
    1,922
    Thanked in
    Agradecido 1,289 veces en [ARG:2 UNDEFINED] posts
    By the way, estoy usando las boost::beast para las peticiones http, así me ahorro quebraderos de cabeza.
    No es lo mismo tener diez años de experiencia, que tener un año de experiencia diez veces.


    It is an undisputed truth that the Atari ST gets the best out of coders. No dedicated hardware, just the CPU and a frame buffer! Some call it Spartan, others name it Power Without The Price, and a select few say `challenge accepted'! --- by spkr from smfx

  12. #10

    Fecha de ingreso
    Sep 2006
    Ubicación
    Malaga
    Mensajes
    7,561
    Mencionado
    47 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    1,668
    Agradecer Thanks Received 
    1,922
    Thanked in
    Agradecido 1,289 veces en [ARG:2 UNDEFINED] posts
    Después de buscar por todas partes me he encontrado con esta libreria, https://github.com/RAvenGEr/simple-beast-client, que esta montada sobre las boost::beast, y haciendo un cambio cutre y rapido funciona, eso si, he tenido que ejecutar paso a paso porque me daba un "Error unsupported scheme." y para que funcionen las peticiones https tienes que tener definido un ENABLE_HTTPS que no viene en la documentación.

    Un dia entero para esto XD.
    No es lo mismo tener diez años de experiencia, que tener un año de experiencia diez veces.


    It is an undisputed truth that the Atari ST gets the best out of coders. No dedicated hardware, just the CPU and a frame buffer! Some call it Spartan, others name it Power Without The Price, and a select few say `challenge accepted'! --- by spkr from smfx

  13. #11

    Fecha de ingreso
    Nov 2005
    Ubicación
    Excartagenero
    Mensajes
    23,651
    Mencionado
    276 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    5,993
    Agradecer Thanks Received 
    5,821
    Thanked in
    Agradecido 3,794 veces en [ARG:2 UNDEFINED] posts
    Entradas de blog
    1
    Pvta m1erda de tiempo perdido por una chorrada...!!

    ¿Una IA lo hubiese podido resolver? ahora mismo me lo pregunto esto... me siento como mi padre hace unos años con su profesión que lo dejó "obsoleto".

  14. #12

    Fecha de ingreso
    Sep 2006
    Ubicación
    Malaga
    Mensajes
    7,561
    Mencionado
    47 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    1,668
    Agradecer Thanks Received 
    1,922
    Thanked in
    Agradecido 1,289 veces en [ARG:2 UNDEFINED] posts
    Pues no se me ocurrió, lo malo es como plantear la pregunta para que "acierte" y que me tendría que registrar en chatGPT XD
    No es lo mismo tener diez años de experiencia, que tener un año de experiencia diez veces.


    It is an undisputed truth that the Atari ST gets the best out of coders. No dedicated hardware, just the CPU and a frame buffer! Some call it Spartan, others name it Power Without The Price, and a select few say `challenge accepted'! --- by spkr from smfx

  15. #13

    Fecha de ingreso
    Sep 2009
    Ubicación
    Donde quiero
    Mensajes
    6,160
    Mencionado
    175 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    1,848
    Agradecer Thanks Received 
    2,378
    Thanked in
    Agradecido 1,309 veces en [ARG:2 UNDEFINED] posts
    Cita Iniciado por swapd0 Ver mensaje
    Pues no se me ocurrió, lo malo es como plantear la pregunta para que "acierte" y que me tendría que registrar en chatGPT XD
    Cuenta google falsa y logueas con ella, así lo hago yo con todo y así uso yo ChatGPT.

    Sin tener idea de cómo consumir esa API, le he preguntado, me ha dado indicaciones y me ha ofrecido una solución usando Python. Le he pedido si podía hacer lo mismo con C++ y me ha ofrecido esta solución usando curl:

    Podrías indicarme cómo hacer lo mismo en C++?
    Sí, por supuesto. Para hacer solicitudes a la API de Polygon en C++, necesitará utilizar una biblioteca que le permita interactuar con la API de manera efectiva. A continuación, le proporcionaré un ejemplo de cómo hacer una solicitud a la API de Polygon utilizando la biblioteca "curl" en C++ para obtener los datos del día actual sin que devuelva delayed:
    #include <iostream>
    #include <curl/curl.h>
    #include <string>

    int main() {
    // Configuración de la conexión a la API
    CURL* curl = curl_easy_init();
    std::string url = "https://api.polygon.io/v2/snapshot/locale/us/markets/stocks/today?apiKey=<API KEY>";
    curl_easy_setopt(curl, CURLOPT_URL, url.c_str());

    // Configuración de los parámetros de solicitud
    struct curl_slist* headers = nullptr;
    headers = curl_slist_append(headers, "Content-Type: application/json");
    headers = curl_slist_append(headers, "Accept: application/json");
    curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);

    // Realización de la solicitud
    CURLcode res;
    std::string response;
    curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, [](char* ptr, size_t size, size_t nmemb, void* userdata) -> size_t {
    ((std::string*)userdata)->append(ptr, size * nmemb);
    return size * nmemb;
    });
    curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
    res = curl_easy_perform(curl);
    curl_slist_free_all(headers);
    curl_easy_cleanup(curl);

    // Procesamiento de la respuesta
    std::cout << "Response: " << response << std::endl;

    return 0;
    }
    En este ejemplo, utilizamos la biblioteca "curl" para hacer una solicitud GET a la API de Polygon. Primero, configuramos la conexión a la API especificando la URL de solicitud y nuestra clave de API. Luego, configuramos los parámetros de la solicitud, como los encabezados de solicitud necesarios. Por último, realizamos la solicitud utilizando la función curl_easy_perform y procesamos la respuesta utilizando la biblioteca estándar de C++.

    Es importante que tenga en cuenta que deberá reemplazar <API KEY> en la URL de solicitud con su propia clave de API de Polygon para que la solicitud funcione correctamente. Además, asegúrese de haber instalado la biblioteca "curl" en su sistema antes de compilar y ejecutar este código.

Permisos de publicación

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