新手问题 Rails Net::HTTP post 表单数据时,“+” 号被过滤?

guyzyl · 2012年08月08日 · 最后由 guyzyl 回复于 2012年08月08日 · 3785 次阅读

做一个关于 Rails 的项目,客户端生成的经过 base64 编码的字符串为

MC0CFQDnTCw++eZq4XEaKSvtJcLC9BROBwIUBoPrHifGVS/drgovQxMp+x9V qmw=

不过在 log 里看到字符串变成如下: {"client_info"=>"MC0CFQDnTCw eZq4XEaKSvtJcLC9BROBwIUBoPrHifGVS/drgovQxMp x9V\nqmw=\n"}

就是对应“+”号的地方变成空格了。

请求的地方为: data = http_post("/auth", 'client_info=%s' % client_info) 问一下是怎么回事呢,如何才能正常呢?

我现在用 Faraday, 方便~

浏览器在 POST 数据时,会先编码(URL encode),再发送。所以用其他方式发送数据时,也要在客户端先编码。

空格会被编码为 + 号,所以 Rails 的解码时,会把 + 号解码为空格。

Faraday 有个选项是 url_encoded,可以在 POST 数据时先编码,不用自己操心。 https://github.com/technoweenie/faraday

如果不能修改客户端的数据,也可以在服务器端得到 POST 的原始数据(似乎是 raw_post 方法。目前没有环境不容易测试,抱歉了)

#2 楼 @zhangyuan 太谢谢了~明白是怎么回事了~

需要 登录 后方可回复, 如果你还没有账号请 注册新账号