Home

zhangyiqun

Thoughts, stories and ideas.

Notes Blog Archives About
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吃到哪里了。

继续浏览文档,并最终使用下面的代码解决了这个问题。

Notes Blog Archives About