如何通过TCPSocket发送HTTP请求?
问题描述:
我写了一个类Ruby
作为HTTP客户端。该代码是最小的,但我没有使用'net/http'
的原因是因为这种方法允许我更多地控制所做的请求,并且HTTP文档根本没有帮助。如何通过TCPSocket发送HTTP请求?
无论如何,问题是套接字将只适用于一个请求和响应。发送第二个或随后的请求会给我一个空的答复。
例如:
- 打开连接到google
- GET “/”
- 响应是HTML google.ca
- GET “/”
- 响应是空
我试图关闭并打开请求之间的连接,但只有放慢了速度,并没有解决问题。我仍然有空回应。
那么这里有什么问题?
是否有一种方法可以让我检查TCPSocket
对象是否有开放连接,所以我不会意外打开一个新连接?
答
尝试:
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”并读取响应,然后发送下一个请求。
没有代码示例,它很难具体。为什么不看重Ruby的'open-uri',或者typhoeus,httpclient或者遏制宝石,而不是重塑一个精心布置的轮子? – 2011-05-03 04:15:55