Ruby:持久HTTP客户端在第二次请求时没有收到响应

时间:2016-05-30 04:07:29

标签: ruby http client persistent recv

我正在尝试创建一个使用持久连接的HTTP客户端。当我发送第一个请求并得到我的第一个回复时,我的代码就可以运行但是,当我发送第二个请求时,我无法得到第二个回复。我不知道为什么?我在C编码时遇到了同样的错误。

这是代码

require 'socket'
include Socket::Constants
socket = Socket.new( AF_INET, SOCK_STREAM, 0 )
sockaddr = Socket.pack_sockaddr_in( 80, 'www.google.com' )
socket.connect( sockaddr )

# This Works
socket.write( "GET / HTTP/1.0\r\n\r\n" )
results = socket.read

# This Works
socket.write( "GET / HTTP/1.0\r\n\r\n" )
# THIS DOESN'T WORK
results = socket.read

我不想使用像Net :: HTTP这样的构建库。我需要做些什么来完成这项工作?

1 个答案:

答案 0 :(得分:0)

您不能在同一个连接上发出2个HTTP请求,除非您已告知服务器您希望这样做。这就是HTTP persistent connection的工作原理。至少,您必须确保将其添加到您的请求标头中:

Connection: keep-alive

服务器对持久连接有不同的支持,尽管服务器支持基本持久连接变得很常见。这是一个提出问题What exactly does a “persistent connection” mean?

的问题

从那里开始,您将找到您需要了解的内容,以使持久连接正常工作。您可能必须检查HTTP响应标头以获取服务器将遵守您的请求的指示,或者您可能必须检查服务器在完成第一个响应的写入时是否只是关闭连接。在通过持久连接的最终请求中,您还应指定标题:

Connection: close

另请查看以下资源: