curl_easy_perform GET请求中的内容类型为空

时间:2019-04-09 08:37:36

标签: libcurl

请忽略此问题,问题似乎出在werkzeug上。

我相信我在libcurl版本7.29(CentOS 7)中检测到使用curl_easy_perform发送的GET请求的 Content-Type 有问题。 问题在于请求中存在HTTP标头 Content-Type (值为空):

Content-Type:

在带有libcurl 7.58的Ubuntu 18.04中,不会发生此问题(如预期的那样,请求中不存在标头)。我搜索了Changlogs,但未找到有关此假定修复的任何信息。我确实发现有人提到过PHP-curl库中修复的同一错误。

所以,我的问题很简单:这种行为是否已固定在7.29和7.58之间的某个位置上?

我只是做了一个尽可能短的测试实现,以查看问题所在。 这是完整的代码:

#include <stdio.h>         // fprintf, ...                                                                       
#include <stdlib.h>        // exit                                                                               
#include <curl/curl.h>     // curl                                                                               
#include <curl/curlver.h>  // VERSION                                                                            

int main(int argC, char* argV[])
{
  CURL*     curlP;
  CURLcode  cc;

  printf("curl version: %s\n", LIBCURL_VERSION);

  curlP = curl_easy_init();

  if (curlP == NULL)
  {
    fprintf(stderr, "curl_easy_init failed: %s\n", curl_easy_strerror(cc));
    exit(1);
  }

  curl_easy_setopt(curlP, CURLOPT_URL, "localhost:1028/accumulate");
  cc = curl_easy_perform(curlP);

  if (cc != CURLE_OK)
  {
    fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(cc));
    exit(2);
  }

  curl_easy_cleanup(curlP);

  return 0;
}

代码在名为get.c的文件中进行编辑,我这样编译它:

gcc get.c -o get -lcurl

该测试在带有libcurl 7.58(我在/ usr / local下手动安装)的CentOS 7中运行。

我有一个简单的测试程序,一个用python编写的累加器,侦听端口1028,记录所有进入的请求,并在接收到具有URL路径/dump的请求时吐出。

这是整个序列:

kz@centos7:curlTest> gcc get.c -o get -lcurl
kz@centos7:curlTest> ./get
curl version: 7.58.0
kz@centos7:curlTest> curl localhost:1028/dump
GET http://localhost:1028/accumulate
Content-Length: 
Host: localhost:1028
Accept: */*
Content-Type: 
=======================================
kz@centos7:curlTest> 

从该测试中可以看出,GET请求(由get发送到累加器)包括不带值的HTTP标头Content-LengthContent-Type

在Ubuntu 18.04中完全相同的测试如下所示:

kz@xps:libcurlTest> gcc get.c -o get -lcurl
kz@xps:libcurlTest> ./get
curl version: 7.58.0
kz@xps:libcurlTest> curl localhost:1028/dump
GET http://localhost:1028/accumulate
Accept: */*
Host: localhost:1028
=======================================
kz@xps:libcurlTest> 

请注意,缺少Content-LengthContent-Type

在实施这个小的测试程序之前,我作了很多尝试来避免使用Content-Type,方法是将其列表中的var list = Array.from(document.querySelectorAll("ul > li")); var target = new Date('09-04-2019 15:15'); var boolValue = { true: 1, false: 0 }; var sortByStartTime = function (a, b) { var diffA = new Date(a.dataset.startdate) - target; var diffB = new Date(b.dataset.startdate) - target; var inplayA = boolValue[a.dataset.inplay]; var inplayB = boolValue[b.dataset.inplay]; return inplayB - inplayA || ( diffA < 0 === diffB < 0 ? Math.abs(diffA) - Math.abs(diffB) : diffB - diffA ); }; list.sort(sortByStartTime); for (var i = 0; i < list.length; i = i + 1) { list[i].parentNode.appendChild(list[i]); }设置为“ Content-Type:”,不带空格,在冒号后有一个空格和两个空格。 。我也尝试了不使用冒号,当然也没有将其添加到slist中(在这种情况下,它带有默认的content-type)。我还试图告诉libcurl,该请求是一个GET,现在不记得该调用的详细信息了。

现在,该错误可能是我的,因为我使用libcurl的经验很少。奇怪的是,在Ubuntu中一切正常,但在CentOS中却没有...

0 个答案:

没有答案