ruby RestClient中的curl请求

时间:2016-04-13 15:08:28

标签: ruby-on-rails ruby curl rest-client

fastbill API在其文档中声明要发出此curl请求以便接收信息:

curl -v -X POST \ 
–u {E-Mail-Adresse}:{API-Key} \ 
-H 'Content-Type: application/xml' \ 
-d '{xml body}' \ 
https://my.fastbill.com/api/1.0/api.php

使用RestClient我尝试将其转换为类似请求的红宝石:

我怎么看这个: - 使用基本身份验证向https://my.fastbill.com/api/1.0/api.php发帖请求,并在标题中说明内容类型,是否正确?

现在这将是RestClient中基于资源的请求,如下所示:

首先我验证:

resource = RestClient::Resource.new( 'https://my.fastbill.com/api/1.0/api.php', 'my@email.de', 'API-KEY-XXXXX' )

工作并授权我。 然后把我的请求放在:

xml = '<?xml version="1.0" encoding="utf-8"?><FBAPI><SERVICE>customer.get</SERVICE><FILTER/></FBAPI>'

resource.post xml, content_type: 'application/xml'

它总是返回400,我不知道还能做什么。

json怎么会在这里工作?

resource.post param1: 'value', content_type: 'json'

很明显。

2 个答案:

答案 0 :(得分:0)

您可以使用Restclient :: Request.execute。 400错误通常表示recipeint不理解请求。这可能是由标头或格式错误的数据引起的。您可能需要添加accept标头。试试下面的例子

require 'rest_client'

RestClient::Request.execute(
    method: :post,
    :user => 'api_user@example.com',
    :password => 'pass123',
    url:    "https://example/user.json",
    payload: { 'user' => { 'name' => 'John Doe', 'email' => 'john.doe@example.com'} }.to_json,
    headers: {:content_type => :json, :accept => :json}
)

您可以找到选项Calling web service that sits on a load balancer with jax-ws returns at http status of 302, but when I use SoapUI it works fine

的详细列表

答案 1 :(得分:-3)

$url="https://my.fastbill.com/api/1.0/api.php";
$curl = curl_init(); 
curl_setopt($curl,CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($curl);
curl_close($curl);
print_r(json_decode($result));