C++ 使用查询字符串的Libcurl HTTP GET请求

C++ 使用查询字符串的Libcurl HTTP GET请求,c++,http,get,libcurl,C++,Http,Get,Libcurl,我正在努力做一个传递查询字符串的GET请求。每次我运行它,我都会得到410 gone的响应,我检查了链接是否被删除,但仍然可以访问 我的代码: CURLUcode rc; CURLU* url = curl_url(); CURL* handle = curl_easy_init(); CURLcode res; struct curl_slist* list = NULL; if (handle) { rc = curl

我正在努力做一个传递查询字符串的GET请求。每次我运行它,我都会得到410 gone的响应,我检查了链接是否被删除,但仍然可以访问

我的代码:

    CURLUcode rc;
    CURLU* url = curl_url();
    CURL* handle = curl_easy_init();
    CURLcode res;
    struct curl_slist* list = NULL;
    
    if (handle) {
        rc = curl_url_set(url, CURLUPART_HOST, "www.example.com", 0);
        rc = curl_url_set(url, CURLUPART_QUERY,"b=sashio", CURLU_APPENDQUERY);
        rc = curl_url_set(url, CURLUPART_QUERY, "id=me_ZwNjBQRlZGL0AwR0ZQNjAQR1AQZ3At==", CURLU_APPENDQUERY);
        rc = curl_url_set(url, CURLUPART_SCHEME, "http", 0);
        rc = curl_url_set(url, CURLUPART_PATH, "/en/m.php?", 0);
        curl_easy_setopt(handle, CURLOPT_CURLU, url);

        list = curl_slist_append(list, "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9");
        curl_easy_setopt(handle, CURLOPT_HTTPHEADER, list);

        curl_easy_setopt(handle, CURLOPT_HTTPGET, 1L);
        curl_easy_setopt(handle, CURLOPT_VERBOSE, 1L);
        curl_easy_setopt(handle, CURLOPT_ENCODING, "");    
    }

    res = curl_easy_perform(handle);
* Mark bundle as not supporting multiuse
* HTTP 1.0, assume close after body
< HTTP/1.0 410 Gone
< Date: Wed, 12 Aug 2020 19:41:23 GMT
< Server: Apache
< X-UA-Compatible: IE=EmulateIE9
< Last-Modified: Wed, 12 Aug 2020 19:41:23 GMT
< Cache-Control: private, must-revalidate, max-age=0
< Etag: "1804121564-00010031-BZGZ0AGt5BQt2AGD1ZQZ1AmV"
< Set-Cookie: PHPSESSID=tp3mbkk7148cm989areejhhd90; path=/
< Expires: Thu, 19 Nov 1981 08:52:00 GMT
< Pragma: no-cache
< Content-Length: 192
< Connection: close
< Content-Type: text/html
<
* Closing connection 0
详细输出:

    CURLUcode rc;
    CURLU* url = curl_url();
    CURL* handle = curl_easy_init();
    CURLcode res;
    struct curl_slist* list = NULL;
    
    if (handle) {
        rc = curl_url_set(url, CURLUPART_HOST, "www.example.com", 0);
        rc = curl_url_set(url, CURLUPART_QUERY,"b=sashio", CURLU_APPENDQUERY);
        rc = curl_url_set(url, CURLUPART_QUERY, "id=me_ZwNjBQRlZGL0AwR0ZQNjAQR1AQZ3At==", CURLU_APPENDQUERY);
        rc = curl_url_set(url, CURLUPART_SCHEME, "http", 0);
        rc = curl_url_set(url, CURLUPART_PATH, "/en/m.php?", 0);
        curl_easy_setopt(handle, CURLOPT_CURLU, url);

        list = curl_slist_append(list, "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9");
        curl_easy_setopt(handle, CURLOPT_HTTPHEADER, list);

        curl_easy_setopt(handle, CURLOPT_HTTPGET, 1L);
        curl_easy_setopt(handle, CURLOPT_VERBOSE, 1L);
        curl_easy_setopt(handle, CURLOPT_ENCODING, "");    
    }

    res = curl_easy_perform(handle);
* Mark bundle as not supporting multiuse
* HTTP 1.0, assume close after body
< HTTP/1.0 410 Gone
< Date: Wed, 12 Aug 2020 19:41:23 GMT
< Server: Apache
< X-UA-Compatible: IE=EmulateIE9
< Last-Modified: Wed, 12 Aug 2020 19:41:23 GMT
< Cache-Control: private, must-revalidate, max-age=0
< Etag: "1804121564-00010031-BZGZ0AGt5BQt2AGD1ZQZ1AmV"
< Set-Cookie: PHPSESSID=tp3mbkk7148cm989areejhhd90; path=/
< Expires: Thu, 19 Nov 1981 08:52:00 GMT
< Pragma: no-cache
< Content-Length: 192
< Connection: close
< Content-Type: text/html
<
* Closing connection 0
*将捆绑包标记为不支持多用途
*HTTP 1.0,假设在正文之后关闭
特别感谢大家@AndreasWenzel正如AndreasWenzel所说,浏览器正在向服务器发送cookie。因此,在我添加cookie的标题中,现在我收到了正确的响应。
祝你今天愉快

我错放了逗号。你是如何检查链接的?通过浏览它。第一个
CURLUPART\u查询
不应该忽略
CURLU\u APPENDQUERY
标志吗,因为还没有设置查询?更重要的是,路径和查询之间的
不是路径(或查询)本身的一部分,因此它不应该显式包含在
CURLUPART\u路径
(或
CURLUPART\u查询
)中。您的浏览器可能正在HTTP请求中向服务器发送会话cookie,因此,它从服务器获得的响应与libcurl不同。