Ruby + HTTParty - 如何使用data-binary发送POST请求?

时间:2017-10-25 23:09:50

标签: ruby post httparty

我有以下curl有效:

curl 'https://externalsite.com/ForgotPasswordSubmit.action' \
-X POST \
-H 'Content-Type: multipart/form-data; boundary=----qwertyuiop' \
--data-binary $'------qwertyuiop\r\nContent-Disposition: form-data; name="xsrf_token"\r\n\r\nnull\r\n------qwertyuiop\r\nContent-Disposition: form-data; name="emailAddr"\r\n\r\nmy_email_address@gmail.com\r\n------qwertyuiop--\r\n'

我正在尝试使用Ruby + Sinatra应用程序来执行相同的操作,但它无法正常工作。这是我最近的尝试:

HTTParty.post "https://externalsite.com/ForgotPasswordSubmit.action", :headers => {"Content-Type"=>"multipart/form-data; boundary=----qwertyuiop"}, :body => '------qwertyuiop\r\nContent-Disposition: form-data; name="xsrf_token"\r\n\r\nnull\r\n------qwertyuiop\r\nContent-Disposition: form-data; name="emailAddr"\r\n\r\nmy_email@gmail.com\r\n------qwertyuiop--\r\n'

1 个答案:

答案 0 :(得分:0)

我最终让它与curb合作。主要问题是curl $'my_string\n'类型的字符串将\r\n个字符转换为新行,而在ruby中我尝试'my_string\n'自动解析为my_string\\n。通过更改为使用双引号我修复了这个问题。

最终工作代码是:

curl = Curl::Easy.new('https://externalsite.com/ForgotPasswordSubmit.action')
curl.headers["Content-Type"] = "multipart/form-data; boundary=----qwertyuiop"
data = "------qwertyuiop\r\nContent-Disposition: form-data; name=\"xsrf_token\"\r\n\r\nnull\r\n------qwertyuiop\r\nContent-Disposition: form-data; name=\"emailAddr\"\r\n\r\n#{email}\r\n------qwertyuiop--\r\n"
curl.post_body=data
curl.http_post