Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 使用TCPSocket从html表单帖子获取内容_Ruby_Sockets_Post_Tcpsocket - Fatal编程技术网

Ruby 使用TCPSocket从html表单帖子获取内容

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 如果我再次使用

在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

如果我再次使用.get,则所有内容都将挂起,我将如何获得长度为45的“内容”?我可以从我的TCPSocket对象中获取它,还是必须使用其他东西?

获取
读取一行,因此它将阻塞,直到连接超时或读取换行符。您应该使用
read
方法,该方法读取给定数量的字节(这在内容长度标题中非常方便提供)。

包括标题:

连接:关闭


到页眉。这将防止在实际读取请求正文之前挂起。

您可能会发现使用
Net::HTTP
Mechanize
比手工操作更容易。HTTP在标准库中。谢谢,这正是我想要的。通过ruby doc阅读我没有看到“read”方法,我怎么会发现这一点?避免堆栈溢出。@Matthew:是的,一开始读文档会让人困惑。请注意,
Socket
类是
BasicClass
的一个子类,后者又是
IO
的一个子类(这在文档中每个类的“父”字段下列出)。
IO
类具有
read
方法。oops,我的意思是
Socket
BasicSocket
的子类,而不是
BasicClass