【问题标题】:Add paramethers to libcurl GET in c++在 C++ 中将参数添加到 libcurl GET
【发布时间】:2013-10-25 06:43:19
【问题描述】:

我想使用 c++ 在变量中添加一些额外的数据到 HTTP GET。当我使用 HTTP POST 发出请求时,我会这样做:

    curl_easy_setopt(curl, CURLOPT_URL, path);
    curl_formadd(&beginPostList, &endPostList, CURLFORM_COPYNAME, "variable1", CURLFORM_COPYCONTENTS, variable1.c_str(), CURLFORM_END);
    curl_formadd(&beginPostList, &endPostList, CURLFORM_COPYNAME, "variable2", CURLFORM_COPYCONTENTS, variable2.c_str(), CURLFORM_END);
    curl_formadd(&beginPostList, &endPostList, CURLFORM_COPYNAME, "variable3", CURLFORM_COPYCONTENTS, variable3.c_str(), CURLFORM_END);

    curl_easy_setopt(curl, CURLOPT_POST, true);
    curl_easy_setopt(curl, CURLOPT_HTTPPOST, beginPostList);

但是我怎样才能使用 GET 方法做类似的事情呢?

【问题讨论】:

    标签: c++ libcurl


    【解决方案1】:

    对于GET,只需将参数附加到 URL,例如

    http://some.host.com/some/path?variable1=value1&variable2=value2
    

    我相信你以前见过!

    【讨论】:

    • 我正在寻找相同问题的答案,虽然你的方法可行,但我希望 libcurl 能提供类似于其他语言(例如 pycurl)的东西,它有一种分别提供参数的方法这样图书馆就可以自动处理“清理”。例如,如果我有字段并且用户放置了一个 & 字符,那么在不修改的情况下获取变量可能会导致问题。有什么建议吗?
    • @ThinkBonobo 如果您使用 C++,则将所有参数放在 std::map 中,键是“变量”名称,值是值(作为字符串,或使用例如 @987654321 @)。然后,您可以根据需要添加和删除键值对。在执行实际 GET 操作之前使用此映射构造 URL。
    【解决方案2】:

    现在存在对此的一些支持(从 curl 版本 7.62 开始)。 '?''&' 是自动添加的,但我目前看不到单独添加参数和值的方法,因此仍然必须在它们之间使用 '=' 创建它们。

    // Create URL
    CURLUcode result;
    CURLU *url = curl_url();
    char *urlStr;
    
    result = curl_url_set(url, CURLUPART_URL, "https://example.com/hello.json", 0);
    
    if(!result) {
        const char paramValue1[] = "param1=value1";
        const char paramValue2[] = "param2=value2";
    
        // Add paramters
        result = curl_url_set(url, CURLUPART_QUERY, paramValue1, CURLU_APPENDQUERY);
        result = curl_url_set(url, CURLUPART_QUERY, paramValue2, CURLU_APPENDQUERY);
    
        // Convert URL to string for printing
        result = curl_url_get(url, CURLUPART_URL, &urlStr, 0);
    
        printf("New URL: %s", urlStr);
    }
    curl_url_cleanup(url);
    
    // Output: New URL: https://example.com/hello.json?param1=value1&param2=value2
    

    参考文献

    [1]https://curl.haxx.se/libcurl/c/curl_url_set.html

    【讨论】:

      猜你喜欢
      • 2013-11-27
      • 1970-01-01
      • 2012-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多