我正在用 C 语言运行一个简单的客户端代码来对服务器进行 POST 和 GET 并读取数据流。目前,我正在打印在 recv()
中收到的完整响应,并且必须对其进行解析以供进一步使用。在读取数据流之前,我想知道来自服务器的HTTP状态代码(200、400、401等)是什么。我在标题中得到同样的结果。有没有办法在读取 headers 之前获取 HTTP 代码?
读取头参数和有效负载的最佳实践是什么?我搜索过,但得到的答案是读取“\r\n”序列并应用逻辑。还有更好的办法吗?
我正在使用 Ubuntu 系统来测试此代码。以下是正在打印的响应:
<p style="color:blue;">HTTP/1.1 401 Unauthorized
Server: Apache-Coyote/1.1
Content-Type: application/json
Content-Length: 69
Date: Mon, 08 Aug 2016 09:46:46 GMT
</p>
<p style="color:blue;">"You are not a authorized user to access this resource. Access denied."
最佳答案
没有。 recv()
从套接字接收原始数据,我想在这种情况下是 TCP/IP。 TCP/IP 是一个较低层的协议(protocol),没有 HTTP 状态码的概念,HTTP 数据只是字节,没有任何意义。
因此,您确实必须读取数据,将其解释为 HTTP 协议(protocol)数据,然后从中获取状态代码。
<小时/>您应该将 TCP/IP 和 HTTP 协议(protocol)的关注点分开。如果您想学习,您可以自己编写一个简单的 HTTP 客户端库;如果您需要生产质量代码,则可以找到一个现有的库(libcurl)。然后使用该库来处理 HTTP 协议(protocol)处理,并对应用程序代码隐藏较低级别的 TCP/IP 流量。
关于c - 如何从C中的recv()读取提取参数和有效负载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38828412/