使用ruby发送手动编码的http请求时出错

时间:2012-08-01 14:15:26

标签: ruby http

想要测试一下http的内容,我做了类似的事情:

socket = TCPSocket.open('localhost',4567)

request = "GET / HTTP/1.1\r\nHost:localhost\r\n\r\n"

socket.print request

但是西纳特拉给了我一个错误:

[2012-08-01 14:04:11] ERROR bad Request-Line `'.
ec2-184-169-164-27.us-west-1.compute.amazonaws.com - - [01/Aug/2012:14:04:11 UTC] "" 400 313
- -> 

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

这可能取决于Web服务器,某些Web服务器需要某些标头(我遇到了同样的问题并通过添加Accept标头解决了),还有一些防火墙需要User-Agent,所以试试这个之一:

socket.puts "GET / HTTP/1.1\r\n"
socket.puts "Host: localhost\r\n"
socket.puts "Accept: text/html,*/*\r\n"
socket.puts "User-Agent: Mozilla/4.0 (Windows; MSIE 6.0; Windows NT 6.0)\r\n"
socket.puts "Connection: close\r\n"
socket.puts "\r\n"

还要注意之后的空格:(很少见)但是网络服务器可能需要这个空间!

也使用puts可能比print更好。 (在我看来!)