Ruby 使用TCPSocket从html表单帖子获取内容
在TCPSocket对象上重复使用“get”方法,我收到以下输出Ruby 使用TCPSocket从html表单帖子获取内容,ruby,sockets,post,tcpsocket,Ruby,Sockets,Post,Tcpsocket,在TCPSocket对象上重复使用“get”方法,我收到以下输出 POST /targetPage.html HTTP/1.1 Host: 127.0.0.1:7125 ... ... ... Keep-Alive: 115 DNT: 1 Connection: keep-alive Referer: http://127.0.0.1:7125/ Content-Type: application/x-www-form-urlencoded Content-Length: 45 如果我再次使用
POST /targetPage.html HTTP/1.1
Host: 127.0.0.1:7125
...
...
...
Keep-Alive: 115
DNT: 1
Connection: keep-alive
Referer: http://127.0.0.1:7125/
Content-Type: application/x-www-form-urlencoded
Content-Length: 45
如果我再次使用.get,则所有内容都将挂起,我将如何获得长度为45的“内容”?我可以从我的TCPSocket对象中获取它,还是必须使用其他东西?
获取
读取一行,因此它将阻塞,直到连接超时或读取换行符。您应该使用read
方法,该方法读取给定数量的字节(这在内容长度标题中非常方便提供)。包括标题:
连接:关闭
到页眉。这将防止在实际读取请求正文之前挂起。您可能会发现使用
Net::HTTP
或Mechanize
比手工操作更容易。HTTP在标准库中。谢谢,这正是我想要的。通过ruby doc阅读我没有看到“read”方法,我怎么会发现这一点?避免堆栈溢出。@Matthew:是的,一开始读文档会让人困惑。请注意,Socket
类是BasicClass
的一个子类,后者又是IO
的一个子类(这在文档中每个类的“父”字段下列出)。IO
类具有read
方法。oops,我的意思是Socket
是BasicSocket
的子类,而不是BasicClass