2011-05-03 189 views
1

我写了一个类Ruby作为HTTP客户端。该代码是最小的,但我没有使用'net/http'的原因是因为这种方法允许我更多地控制所做的请求,并且HTTP文档根本没有帮助。如何通过TCPSocket发送HTTP请求?

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

例如:

  1. 打开连接到google
  2. GET “/”
  3. 响应是HTML google.ca
  4. GET “/”
  5. 响应是空

我试图关闭并打开请求之间的连接,但只有放慢了速度,并没有解决问题。我仍然有空回应。

那么这里有什么问题?

是否有一种方法可以让我检查TCPSocket对象是否有开放连接,所以我不会意外打开一个新连接?

+0

没有代码示例,它很难具体。为什么不看重Ruby的'open-uri',或者typhoeus,httpclient或者遏制宝石,而不是重塑一个精心布置的轮子? – 2011-05-03 04:15:55

回答

3

尝试:

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 

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