Пожалуйста, не обращайте внимания на эту проблему, похоже, что проблема заключается в werkzeug
.
Я считаю, что обнаружил проблему с Content-Type для запросов GET, отправленных с использованием curl_easy_perform
,в libcurl версии 7.29 (CentOS 7).Проблема в том, что HTTP-заголовок Content-Type присутствует (с пустым значением) в запросе:
Content-Type:
В Ubuntu 18.04, с libcurl 7.58, эта проблема не возникает(как и ожидалось, заголовок отсутствует в запросе).Я искал 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
Тест выполняется в CentOS 7 с libcurl7.58 (который я установил вручную в /usr/local).
У меня есть простая тестовая программа, аккумулятор, написанный на 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-Length
и Content-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-Length
иContent-Type
.
Перед реализацией этой небольшой тестовой программы я предпринял множество попыток избежать Content-Type
, установив в своем слайде значение «Content-Type:», без пробела, с одним пробелом и сдва пробела после двоеточия.Я также попытался без двоеточия и, конечно, без добавления его в список (в этом случае он поставляется с типом содержимого по умолчанию).Я также пытался сообщить libcurl, что запрос является GET, сейчас не помню деталей этого вызова.
Теперь, ошибка, вероятно, моя, поскольку у меня очень мало опыта использования libcurl.Просто странно, что в Ubuntu все нормально, а в CentOS нет ...