【问题标题】:Ruby + HTTParty—how to send a POST request with data-binary?Ruby + HTTParty——如何发送带有二进制数据的 POST 请求?
【发布时间】:2017-10-25 23:09:49
【问题描述】:

我有以下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'

【问题讨论】:

    标签: ruby post httparty


    【解决方案1】:

    我最终让它与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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-11-24
      • 2021-06-03
      • 2014-10-07
      • 1970-01-01
      • 2022-01-23
      • 1970-01-01
      • 2014-12-06
      相关资源
      最近更新 更多