Пост-запрос libcurl C++

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by Скотти, 26 Feb 2010.

  1. Скотти

    Скотти Member

    Joined:
    17 Sep 2009
    Messages:
    23
    Likes Received:
    8
    Reputations:
    0
    Есть код из примера:
    PHP:
    #include <stdio.h>
     #include <curl/curl.h>
      
    int main(void) {
      
    CURL *curl;
       
    CURLcode res
       
    curl curl_easy_init();
       if(
    curl)
     { 
        
    curl_easy_setopt(curlCURLOPT_URL"http://postit.example.com/moo.cgi");
         
    curl_easy_setopt(curlCURLOPT_POSTFIELDS"name=daniel&project=curl");
        
    res curl_easy_perform(curl);
        
    curl_easy_cleanup(curl);
    }   
    return 
    0
    }
    Как сделать запрос со своими данными?
    Например:
    PHP:
    #include <string>
     
    ... 
    string email="test@mail.ru";
     
    string pass="password";
      ...     
    curl_easy_setopt(curlCURLOPT_POSTFIELDS"email="+email+"&pass="+pass); ...
    Так не получается, в снифере пустой пост запрос.
    И еще при указании :
    string cookie;
    curl_easy_setopt(curl, CURLOPT_COOKIE, cookie);
    Куки не сохраняются в переменную. Как исправить?
     
  2. Spy2ex

    Spy2ex Elder - Старейшина

    Joined:
    20 Sep 2008
    Messages:
    32
    Likes Received:
    15
    Reputations:
    1
    Code:
    curl_easy_setopt(curl, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1");
    curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writer);
    curl_easy_setopt(curl, CURLOPT_WRITEDATA, &body);
    curl_easy_setopt(curl, CURLOPT_URL, "http://url");
    curl_easy_setopt(curl, CURLOPT_HEADER,1);
    curl_easy_setopt(curl, CURLOPT_POST, 1);
    curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "запрос");
    curl_easy_setopt(curl, CURLOPT_COOKIEFILE, &cookies);
    curl_easy_perform(curl); // посылаем
    
    Code:
    static int writer(char *data, size_t size, size_t nmemb, string *buffer)
    {
      int result = 0;
    
      if (buffer != NULL)
      {
        buffer->append(data, size * nmemb);
        result = size * nmemb;
      }
    
      return result;
    }
    
    Врайтер.
    передавай ее как ссылку.
    &cookie
     
  3. Скотти

    Скотти Member

    Joined:
    17 Sep 2009
    Messages:
    23
    Likes Received:
    8
    Reputations:
    0
    Спасибо.
    Пост запрос будет работать так:
    Code:
    static char *s="...";
    curl_easy_setopt(curl, CURLOPT_POST, 1);
    curl_easy_setopt(curl, CURLOPT_POSTFIELDS, s);
    
    А со string не получается.
     
  4. Spy2ex

    Spy2ex Elder - Старейшина

    Joined:
    20 Sep 2008
    Messages:
    32
    Likes Received:
    15
    Reputations:
    1
    string req ="запрос";
    curl_easy_setopt(curl, CURLOPT_POSTFIELDS, req.c_str());
     
    1 person likes this.
  5. Meecript_

    Meecript_ Banned

    Joined:
    29 Oct 2008
    Messages:
    194
    Likes Received:
    62
    Reputations:
    32
    Они и не должны сохраняться, наоборот они берутся из переменной при использовании CURLOPT_COOKIE.

    Это если куки из файла загружать, а если просто нужно включить их автосохранение, то не обязательно использовать переменную cookies.
    Code:
    curl_easy_setopt(curl, CURLOPT_COOKIEFILE, "");