Ruby httparty发布请求

use*_*151 0 php ruby post http httparty

我有工作的PHP代码

   <?php
    $ch = curl_init("https://myurl/api/add_lead");

    $first_name = $_POST["name"];
    $phone = $_POST["phone"];
    $email = $_POST["email"];
    $ipaddress = $_SERVER['REMOTE_ADDR'];

    curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
    curl_setopt($ch,CURLOPT_POST,true);
    curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,1120);

    curl_setopt($ch,CURLOPT_POSTFIELDS,"first_name=$first_name&phone=$phone&email=$email&ipaddress=$ipaddress");
    curl_setopt($ch,CURLOPT_HTTPHEADER,["Content-Type:application/x-www-form-urlencoded; charset=utf-8"]);

    curl_setopt($ch,CURLOPT_TIMEOUT,60);
    $result = curl_exec($ch);

    curl_close($ch);
    ?>
Run Code Online (Sandbox Code Playgroud)

我需要将其转换为红宝石代码

我试过了

HTTParty.post("https://myurl/api/add_lead",
{
:body => { first_name: "test", phone: "123456789", email: "email@email.com" , ipaddress:'192.168.0.0'},
:headers => {  'Content-Type' => 'application/x-www-form-urlencoded','charset'=>'utf-8'}

})
Run Code Online (Sandbox Code Playgroud)

但有500错误代码

怎么做呢?

小智 7

对于application/x-www-form-urlencoded内容类型使用URI.encode_www_form(your_data)

require 'uri'

...

data = { 
  first_name: "test", 
  phone: "123456789", 
  email: "email@email.com" , 
  ipaddress:'192.168.0.0'
}

authorization_string = "#{ENV['API_KEY']}:#{ENV['API_SECRET']}"
url = "https://myurl/api/add_lead"

response = HTTParty.post(url,
  body: URI.encode_www_form(data),
  headers: { 
    'Content-Type' => 'application/x-www-form-urlencoded', 
    'Authorization' => "Basic #{Base64.strict_encode64(authorization_string)}" 
  }
)

response_body = JSON.parse(response.body)
Run Code Online (Sandbox Code Playgroud)


Luc*_*sta 5

请注意,在您的PHP代码中,您将传递一个字符串作为POST正文。
在Ruby代码中,您正在传递json。

请尝试以下操作:

HTTParty.post("https://myurl/api/add_lead", {
  body: "first_name=test&phone=123456789&email=email@email.com&ipaddress=192.168.0.0",
  headers: {
    'Content-Type' => 'application/x-www-form-urlencoded',
    'charset' => 'utf-8'
  }
})
Run Code Online (Sandbox Code Playgroud)