Значение сообщений libcurl и процесса выполнения

Я использую библиотеку libcurl для извлечения файла abc-1.tar с сервера. Я хочу знать значение сообщения, которое отображает и обрабатывает выполнение libcurl для отображения этих сообщений.

Например: я предоставляю некоторые сообщения ниже этого, я знаю базовое сообщение, означающее, что Content-Length означает длину загружаемого файла и т.д.

Я хочу смысл всех сообщений, особенно сообщений, начинающихся с * (например, Connection #0 to host (nil) left intact)

* Re-using existing connection! (#0) with host (nil)
* Connected to (nil) (182.72.67.14) port 65101 (#0)
GET /...... HTTP/1.1
Host: 182.72.67.14:65101
Accept: */*
Connection:keep-alive
< HTTP/1.1 200 OK
< Cache-Control: private
< Content-Length: 186368
< Content-Type: application/x-tar
< Server: Microsoft-IIS/7.5
< Content-Disposition: attachment; filename=abc-1.tar
< X-AspNet-Version: 4.0.30319
< X-Powered-By: ASP.NET
< Date: Tue, 01 Oct 2013 06:29:00 GMT
< 
* Connection #0 to host (nil) left intact

Ответ 1

Страница пользователя cURL определяет три типа "специального" подробного вывода:

Строка, начинающаяся с ' > ', означает "данные заголовка", отправленные с помощью curl, '<' означает "данные заголовка", полученные с помощью завитка, которые скрыты в обычных случаях, а строка, начинающаяся с "*", означает дополнительную информацию, предоставленную завивом.

Вы можете прочитать поля заголовка HTTP на странице официальной публикации HTTP . Любые другие выходные строки, отображаемые cURL, принадлежат телу HTTP, переносимому соответствующим сообщением.

Итак, что же означает смысл этих информационных ресурсов, начиная с *, спросите вы? Они сообщают вам о состоянии передачи TCP-соединения с хостом. Например:

  • "Connected to (nil) (182.72.67.14) port 65101 (#0)" означает, что TCP-соединение устанавливается со стороны сервера (в вашем случае: 182.72.67.14). #0 - номер сеанса TCP (который используется только cURL). nil указывает, что имя хоста не может быть разрешено через DNS (если бы оно было разрешено, оно появилось бы вместо nil).

  • "Connection #0 to host (nil) left intact" означает, что, хотя передача завершена, сам сеанс TCP все еще открыт (т.е. обмен FIN/ACK не был выполнен), что позволяет вам повторно использовать одно и то же соединение TCP для нескольких передач (что может быть полезно, если вы не хотите жертвовать временем при открытии нового TCP-соединения).

    Сообщение "Re-using existing connection! (#0) with host (nil)" поддерживает это, указывая, что cURL действительно делает это, используя существующее TCP-соединение (из предыдущей передачи).

Ответ 2

Отмечено < - это HTTP-заголовки. Вы можете подробно прочитать о заголовках http и их значении здесь и отмечены *, являются подробной информацией, предоставленной curl, которая отображается на stderr.