【问题标题】:How to get total bytes count transferred over the connection with libcurl?如何获取通过与 libcurl 的连接传输的总字节数?
【发布时间】:2014-11-13 18:54:42
【问题描述】:

Libcurl 允许获取应用级协议(HTTP、FTP 等)发送和接收的字节数信息。但是,有没有办法获取 底层套接字 发送和接收的字节数?我是关于所有数据的,包括,例如,套接字用来建立 SSL 连接的字节。所以,我基本上是在寻找一种从 libcurl 获取与 Apache HTTP 客户端在HttpConnectionMetrics.getSentBytesCount()HttpConnectionMetrics.getReceivedBytesCount() 中提供的相同信息的方法。 一种想法是直接从 C++ 访问 Libcurl 使用的套接字;但是,如何获取此套接字发送/接收的总字节数?

【问题讨论】:

  • 我很确定这在 cURL 中不可用,您必须使用其他一些机制来计算每次传输的字节数。
  • 可能是,但有哪些机制可用?问题是libcurlopenssl都使用同一个socket,所以可能唯一的解决办法就是以某种方式拦截TCP leel上的流量。

标签: c++ sockets libcurl


【解决方案1】:

使用CURLOPT_DEBUGFUNCTION 并将不同的部分相加,因为它显示了套接字级别的数量。因此,这将为您提供所有纯文本协议的确切数字,那些不使用 SSL 的协议

但是 - 尽管在 HTTPS/FTPS 等情况下,这不一定会给您提供 SSL 级别的计数器,因为 libcurl 并不总是公开它。这取决于构建它要使用的特定 TLS 后端。 OpenSSL 后端应该没问题,它也会告诉你传入和传出的 TLS 数据(使用相同的调试回调)。

【讨论】:

  • 我的回答中究竟有什么没有解释这一点?对于 HTTP,如果 libcurl 是针对 OpenSSL 构建的,那么对于基于 SSL 的协议(如 HTTPS),您会得到准确的结果。哪里出错了?
  • 谢谢,丹尼尔,我正在寻找这个答案。
猜你喜欢
  • 2017-10-14
  • 1970-01-01
  • 1970-01-01
  • 2013-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多