Когда URL является HTTPS и в командной строке Windows CMD, curl 8.x не возвращает вывод с параметром -w (работает в 7.x). Я пропустил новый параметр?

Вопрос или проблема

С момента обновления до curl 8.x на Windows, curl перестал возвращать выходные переменные для внутренних сайтов, использующих HTTPS. Я протестировал на известных интернет-сайтах (например, google), и всё работает как ожидается.

Я extensively искал информацию в интернете, но пока не нашёл ни одной причины. Я также подтвердил, что использование старой версии curl (7.x) работает как ожидается, но я не могу использовать старую версию в дальнейшем. Мне не удалось подтвердить, является ли это не задокументированной особенностью (ошибкой) или особенностью.

Проблема сохраняется как при прямом вызове в командной строке Windows, так и через пакетный скрипт Windows.

curl -V
curl 8.7.1 (Windows) libcurl/8.7.1 Schannel zlib/1.3 WinIDN
Дата выпуска: 2024-03-27
Протоколы: dict file ftp ftps http https imap imaps ipfs ipns mqtt pop3 pop3s smb smbs smtp smtps telnet tftp

Здесь curl вызывает небезопасный (http) URL (Обратите внимание, что код ответа (302) можно увидеть внизу)

curl -w "%{response_code}\n" http://www.notarealurl.com
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>302 Found</title>
</head><body>
<h1>Found</h1>
<p>Документ был перемещён <a[TEXT REMOVED]>сюда</a></p>
</body></html>
302

Здесь curl вызывает безопасный (https) URL (Обратите внимание, что код ответа НЕ возвращается как переменная, однако его можно увидеть в заголовке)

curl -w "%{response_code}\n" "https://www.notarealurl.com"
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>302 Found</title>
</head><body>
<h1>Found</h1>
<p>Документ был перемещён.[TEXT REMOVED]</p>
</body></html>

Ответ или решение

Проблема, с которой вы столкнулись, связана с поведением curl версии 8.x при работе с HTTPS URL. Давайте разберем возможные причины и решения.

Причины проблемы

  1. Изменения в curl: Возможные изменения в curl 8.x или в библиотеке OpenSSL/Schannel, используемой для обработки HTTPS-запросов, могли вызвать изменение поведения, особенно при использовании параметра -w.

  2. Недостаточная поддержка параметров: В curl 8.x могла быть убрана или изменена поддержка некоторых параметров, которые работали в 7.x. Обновления могут иногда приводить к изменению формата или доступности определенных выходных переменных.

  3. Исключения для интра-сетей: Иногда конфигурация сети, настройки безопасности или сам SSL сертификат могут вызвать несоответствия или ошибки, которые не позволяют корректно показать ожидаемый вывод.

Рекомендации по решению проблемы

  1. Использование параметра -o: Попробуйте сохранить вывод в файл и затем использовать cat или type, чтобы просмотреть файл. Например:

    curl -o output.html "https://www.notarealurl.com" -w "%{response_code}\n"
    cat output.html
  2. Добавление -i или --include: Это позволит вам увидеть HTTP-заголовки ответа, которые могут содержать информацию о коде ответа:

    curl -i -w "%{response_code}\n" "https://www.notarealurl.com"
  3. Обновление или проверка драйверов Schannel: Убедитесь, что ваша система и библиотеки обновлены до последней версии, так как это может исправить важные ошибки и улучшить совместимость.

  4. Проверка переменных среды: Иногда переменные среды, которые влияют на SSL, могут нарушать работу. Убедитесь, что переменные, такие как CURL_CA_BUNDLE, если они установлены, корректны.

  5. Отладка через флаг -v: Для более детальной информации о запросе и отклике, используйте флаг -v, чтобы увидеть, что происходит:

    curl -v -w "%{response_code}\n" "https://www.notarealurl.com"
  6. Отключение проверки сертификатов (для тестирования): Если вы уверены в безопасности своего запроса, временно отключите проверку сертификатов, чтобы определить, связана ли проблема с ними:

    curl -k -w "%{response_code}\n" "https://www.notarealurl.com"

Заключение

Если в результате предложенных шагов проблема не будет решена, рекомендуется обратиться к документации curl для версии 8.x или к сообществу разработчиков, чтобы проверить, не является ли это известной проблемой, требующей патча. Также вы можете рассмотреть возможность подачи отчета об ошибке, так как это может быть недостатком или изменением, которым не учли при выпуске новой версии.

Оцените материал
Добавить комментарий

Капча загружается...