set debug output
http = Net::HTTP.new("www.something.com", 80)
http.set_debug_output($stdout)
这样就可以在post的时候显示传输的内容,便于调试。
使用nc监视http请求数据
浏览器请求数据可以通过firebug等工具查看,但是有时候需要自己的程序去请求其他应用,这样调试起来很不方便。
通过netcat可以监听一个端口,并且随时回显请求的数据的最原始状态。
终端1:
nc -v -l localhost 12345
返回:
Connection from 0.0.0.0 port 12345 [tcp/*] accepted
PUT / HTTP/1.1
User-Agent: curl/7.22.0 (i686-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3
Host: localhost:12345
Accept: */*
Content-Length: 5
Content-Type: application/x-www-form-urlencoded
{a:1}
终端2:
curl -XPUT http://localhost:12345 -d '{a:1}'
net/http set_form_data
Ruby自带的net/http库,的set_form_data方法在传输之前会进行encode_www_form编码,而普通的post方法是不会的:
def set_form_data(params, sep = '&')
query = URI.encode_www_form(params)
query.gsub!(/&/, sep) if sep != '&'
self.body = query
self.content_type = 'application/x-www-form-urlencoded'
end
http://rubylution.herokuapp.com/topics/20