【问题标题】:HTTP Header not set using Curl in C++未在 C++ 中使用 Curl 设置 HTTP 标头
【发布时间】:2017-12-12 21:30:09
【问题描述】:

我对 HTTP 命令和 libcurl 库非常陌生,因此我很有可能不了解一些基本知识。也就是说,我正在尝试在 C++ 中使用 curl 设置标头,但是当我尝试获取 Content-Type 时,会返回一个空值。我无法弄清楚为什么会这样。这是一段代码:

// HTTP headers to send with request
   struct curl_slist* headers = nullptr;

// Set Content-Type to application/x-hybrid-thrift-binary
   headers = curl_slist_append(headers, "Content-Type: application/x-hybrid-thrift-binary");

   curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
   CURLcode ret = curl_easy_perform(curl);

// Extract the content-type
   char *ct = nullptr;
   ret = curl_easy_getinfo(curl, CURLINFO_CONTENT_TYPE, &ct);
   if(!ret) {
     printf("Content-Type: %s\n", ct);
   }

任何帮助将不胜感激!!!

【问题讨论】:

  • 只是一个推测,但您正在附加到headers,它没有被分配任何内存地址。可能... headers = new curl_list(); 说的都是推测,我对curl一无所知。
  • 我正在使用ret = curl_easy_getinfo(curl, CURLINFO_HEADER_SIZE, &size); 打印标题的大小,它返回一个非零值,我猜这意味着它正在附加到标题。
  • 你是对的。我错了。基于this
  • 另一个疯狂的猜测:你确定返回了标题吗? Seems not mandatory 所以也许它只是丢失了? lidcurl docs say the same

标签: c++ http curl header thrift


【解决方案1】:

来自libcurl docs

概要

#include <curl/curl.h> 

 CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_CONTENT_TYPE, char **ct); 

描述

传递一个指向 char 指针的指针以接收下载对象的内容类型。这是从 Content-Type: 字段读取的值。 如果您得到 NULL,则表示服务器未发送有效的 Content-Type 标头,或者使用的协议不支持。

返回值

如果支持该选项,则返回CURLE_OK,否则返回CURLE_UNKNOWN_OPTION

【讨论】:

  • the protocol used does not support this.这行是什么意思?具体来说,this 代表什么?是不是说明我使用的协议不支持curl?
  • A lot of protocols are supported。很可能并非所有人都支持此特定标头。这部分可能与您的具体情况并不相关。
猜你喜欢
  • 1970-01-01
  • 2014-12-03
  • 2017-06-26
  • 2018-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-03
相关资源
最近更新 更多