10 Mar 2011
如何使用Ruby post数据?
#题外话,有部分同学通过邮箱和留言方式反应博客里代码很潦草,这事我比较冤枉,因为wordpress会忽略用户对代码的排版,此问题在wordpress里是普遍存在的。
#如果哪个代码你看不清了,请留言或者发邮件给我,我会把代码转移到别处,至少能让你看的清。
#在这几年,对于技术人员,有了更好的博客解决方案,我个人比较推崇 jekyll 。有机会会转移过去。
大部分时候我更倾向于使用Curl,但在ruby里调用系统命令影响代码纯洁,并增加了排错成本,还是使用ruby自身的库来搞定。
我想实现Curl中这样的一个效果
curl -d “HELLOWORLD” “http://host:port/?name=your_queue_name&opt=put”
官方文档给出了两种方式,在效果上确实有差异。
#1: Simple POST res = Net::HTTP.post_form(URI.parse('http://host:port/?name=your_queue_name&opt=put'),{'max' => '50'}) puts res.body 我尝试用这种方式向服务器队列POST数据,但始终放不上队列,我不知道是啥原因,于是到服务器上抓包如下 #### T 117.79.83.166:46854 -> xxx.xxx.xxx.xxx:xxx [AP] POST / HTTP/1.1..Accept: */*..User-Agent: Ruby..Content-Type: application/x-www-form-urlencoded..Host: 121.10 1.214.46:1314..Content-Length: 7.... 对比下和Curl提交的包 #### T 117.79.83.166:46843 -> xxx.xxx.xxx.xxx:xxx [AP] POST /?name=newsqs&opt=put HTTP/1.1..User-Agent: curl/7.19.7 (universal-apple-darwin10.0) libcurl/7.19.7 Open SSL/0.9.8l zlib/1.2.3..Host: xxx.xxx.xxx.xxx:xxx..Accept: */*..Content-Length: 9..Content-Type: application/x -www-form-urlencoded....data=ssss 见鬼,/后面的内容消失了,不知道让RUBY吃到哪里了。
继续浏览文档,并最终使用下面的代码解决了这个问题。