c++ - 在 C 中使用原始套接字确定 HTTP 版本

标签 c++ sockets http

我试图在 C/C++ 中创建原始套接字,然后创建请求消息,然后将该消息发送到目标服务器。如果我指定的端口恰好是 80 我想发送一个 HTTP 请求以确定目标服务器正在使用的 HTTP 版本。例如,我将 GET HTTP/1.0 发送到 www.google.com

对于某些服务器,它返回 HTTP/1.1 400 错误请求。而在某些情况下,它会以 XML 消息进行响应。我知道 GET 命令是错误的,因为我没有指定任何要实际 GET 的对象。那么有没有通用的方法来做到这一点?

最佳答案

尝试:

HEAD / HTTP/1.0\r\n
\r\n

或者:

GET / HTTP/1.0\r\n
\r\n

服务器响应的第一行应该包含 HTTP 版本。请注意,某些服务器将返回 400 Bad Request如果Host: <hostname>从 header 中省略(在 1.0 中不需要,但在 1.1 中)。我会这样做:

尝试:

HEAD / HTTP/1.0\r\n
Host: <hostname>\r\n
\r\n

或者:

GET / HTTP/1.0\r\n
Host: <hostname>\r\n
\r\n

如果您不需要邮件正文,您应该使用HEAD因为它需要更少的数据来接收。

关于c++ - 在 C 中使用原始套接字确定 HTTP 版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20226211/

相关文章:

C++ 将字符串写入文本文件中的一行;换行问题\n 不工作

c++ - 使用结构?

sockets - UDP Talker在sendto()调用中给出 “Bad value for ai_flags”

json - Flutter dart json未处理的异常: InternalLinkedHashMap<String,动态>' is not a subtype of type '列表<动态>

c++ - C或C++中是否有标准宏表示int32_t、int64_t的最大值和最小值?

c++ - 如何获取程序执行的指令数?

java - 无法在带有未定义终止符的 channel 上接收 tcp(模式为服务器)消息

node.js - 我要么没有从网络套接字(socket.io)收到任何消息,要么偶尔一次收到所有消息(但并非总是如此)

http - "name"web pdf 在 Acrobat 中更好的默认保存文件名?

php - 两个相互冲突的 X-Powered-By header