如何通过TCPSocket发送HTTP请求?

时间:2011-05-03 03:46:21

标签: ruby http tcp

我在Ruby编写了一个充当HTTP客户端的类。代码很小,但我没有使用'net/http'的原因是因为这种方法允许我对正在进行的请求有更多的控制,而HTTP的文档根本没有帮助。

无论如何,问题是套接字只适用于一个请求和响应。发送第二个或后续请求会给我一个空的回复。

例如:

  1. 打开与谷歌的连接
  2. 获取“/”
  3. 响应是google.ca html
  4. 获取“/”
  5. 响应为空
  6. 我尝试关闭并打开请求之间的连接,但这只会减慢速度并且无法解决问题。我仍然得到空洞的回应。

    那么这里有什么问题?

    是否有方法可以让我查看TCPSocket对象是否有开放连接,这样我就不会意外地打开一个新对象?

1 个答案:

答案 0 :(得分:4)

尝试:

require "socket"
host = "google.com"
port = 80
socket = TCPSocket.new host,port
request = "GET / HTTP/1.0\r\nHost:#{host}\r\n\r\n"
socket.print request
response = socket.read

这将返回Google的主页。如果要在请求后发送请求,则将其更改为“HTTP / 1.1”并读取响应,然后发送下一个请求。