Как на qt в ui->webView отправить post/get запрос из c++ кода?

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by mail156, 17 Mar 2019.

  1. mail156

    mail156 Banned

    Joined:
    28 Sep 2018
    Messages:
    467
    Likes Received:
    358
    Reputations:
    0
    Например, нажатие на определенную точку внутри webView (браузера..)
    делается через такую функцию:
    Как на qt в ui->webView отправить post/get запрос из c++ кода?
     
  2. t0ma5

    t0ma5 Reservists Of Antichat

    Joined:
    10 Feb 2012
    Messages:
    829
    Likes Received:
    815
    Reputations:
    90
    может прикрутить курл? для си исходники курла есть, прикручиваются довольно просто
    либо можно вызывать сам бинарь курла, из плюсов это реализовать очень быстро, из минусов потеря производительности
     
    _________________________
  3. mail156

    mail156 Banned

    Joined:
    28 Sep 2018
    Messages:
    467
    Likes Received:
    358
    Reputations:
    0
    t0ma5, я бы мог попробовать сделать это на curl,
    мне нужна авторизация facebook 2019...

    можешь выложить сюда исходные коды...?
     
  4. t0ma5

    t0ma5 Reservists Of Antichat

    Joined:
    10 Feb 2012
    Messages:
    829
    Likes Received:
    815
    Reputations:
    90
    https://curl.haxx.se/libcurl/c/

    что то около того
    Code:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <curl/curl.h>
    
    .......
    
    struct string {
      char *ptr;
      size_t len;
    };
    
    size_t writefunc(void *ptr, size_t size, size_t nmemb, struct string *s)
    {
      size_t new_len = s->len + size*nmemb;
      s->ptr = realloc(s->ptr, new_len+1);
      if (s->ptr == NULL) {
        fprintf(stderr, "realloc() failed\n");
        exit(EXIT_FAILURE);
      }
     
      memcpy(s->ptr+s->len, ptr, size*nmemb);
      s->ptr[new_len] = '\0';
      s->len = new_len;
    
      return size*nmemb;
    }
    
    void init_string(struct string *s) {
      s->len = 0;
      s->ptr = malloc(s->len+1);
      if (s->ptr == NULL) {
        fprintf(stderr, "malloc() failed\n");
        exit(EXIT_FAILURE);
      }
      s->ptr[0] = '\0';
    }
    
    int main(void)
    {
    
    char cookie[100];
    
    struct string s;
    struct curl_slist *headers=NULL;
    init_string(&s);
    
    
    curl = curl_easy_init();
           if(curl == NULL) {
               printf("Error curl\n");
               break;
           }
           strcpy(cookie, "Cookie: test=123");
           headers = curl_slist_append(headers, "Content-Type: text/xml");
           headers = curl_slist_append(headers, cookie);
           headers = curl_slist_append(headers, "X-silly-header;");
     
           curl_easy_setopt(curl, CURLOPT_URL, "******ru/1.php");
           curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writefunc);
           curl_easy_setopt(curl, CURLOPT_WRITEDATA, &s);
           curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
           res = curl_easy_perform(curl);
    
           if(res != CURLE_OK){
               fprintf(stderr, "curl_easy_perform() failed: %s\n",  curl_easy_strerror(res));
           }
    
           printf("%s\n", s.ptr);
     
           free(s.ptr);
           curl_easy_cleanup(curl);
           curl_slist_free_all(headers);
    }
    
    в принципе там все интуитивно понятно, правда я запоролся на считывании ответа, курл выделяет отдельный кусок памяти под ответ, из него считывать данные надо по циклу(ну пока они не закончатся) в свою кучу
     
    _________________________
    #4 t0ma5, 17 Mar 2019
    Last edited: 17 Mar 2019
    mail156 likes this.
  5. t0ma5

    t0ma5 Reservists Of Antichat

    Joined:
    10 Feb 2012
    Messages:
    829
    Likes Received:
    815
    Reputations:
    90
    повторюсь, если скорость не важна, то лучше избежать байтоёбства и сделать пару переменных под хедер/пост/гет и просто дернуть бинарь курла
     
    _________________________
    mail156 likes this.
  6. t0ma5

    t0ma5 Reservists Of Antichat

    Joined:
    10 Feb 2012
    Messages:
    829
    Likes Received:
    815
    Reputations:
    90
    а вообще хватит вмазываться, возьми selenium https://docs.seleniumhq.org/ . там есть апи для ff/chrome для кучи языков, и педаль себе спокойно код, и тот же курл сможешь без гемороя вызывать если нужно
     
    _________________________
    #6 t0ma5, 17 Mar 2019
    Last edited: 17 Mar 2019
    mail156 likes this.
  7. mail156

    mail156 Banned

    Joined:
    28 Sep 2018
    Messages:
    467
    Likes Received:
    358
    Reputations:
    0