1

想测试一下 http 的幕后发生了什么,所以我做了这样的事情:

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

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

socket.print request

但是 sinatra 给了我一个错误:

[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
- -> 

任何想法?

4

1 回答 1

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 更好。(在我看来!)

于 2012-08-11T20:47:34.057 回答