2017-08-10 18 views
5

RubyでこのpageでトリガされたAPIリクエストのための残りのクライアントリクエストを作成しようとしています。Javascript BlobのRuby rest-client APIリクエスト

I - (source

ページではJavaScriptを見てから、私は作成されているJavascriptのブロブとJSONコンテンツそれに追加して、次のスクリプトでマルチパートフォームで提出があることに気づきました次のコードでルビーで残りのクライアント宝石でこれをエミュレートしようとした -

namespace :materialize do 
    task :connect => :environment do 
    base_uri = "https://imatsandbox.materialise.net/web-api/cartitems/register" 
    request = '{ 
    "cartItems":[ 
    { 
     "toolID":"d65e1eca-7adf-453d-a3bb-eb051fffb567", 
     "MyCartItemReference":"some reference", 
     "modelID":"62352bab-d490-410c-851d-bc62e056e82a", 
     "modelFileName":"", 
     "fileUnits":"mm", 
     "fileScaleFactor":"1", 
     "materialID":"035f4772-da8a-400b-8be4-2dd344b28ddb", 
     "finishID":"bba2bebb-8895-4049-aeb0-ab651cee2597", 
     "quantity":"1", 
     "xDimMm":"12", 
     "yDimMm":"159.94", 
     "zDimMm":"12", 
     "volumeCm3":"2.0", 
     "surfaceCm2":"100.0", 
     "iMatAPIPrice": "25.0", 
     "mySalesPrice": "26.0", 
    } 
    ], 
    "currency":"EUR" 
    }' 
File.open('request', 'wb') do |f| 
    f.write request 
end 


    response = RestClient.post base_uri, {:data => request, headers: {:multipart => true, accept: :json}} 
    puts response.request 
end 
end 

私は常に取得レスポンスボディ -

"{\"error\":{\"message\":\"Wrong request body. Check if all parameters set correctly\",\"code\":401},\"cartItems\":[]}" 

私は間違って何をしていますか?

+0

多分あれば)あなたのサーバ 'log'がこの' api'を要求している様子を見ています私たちはあなたが間違っていることを理解することができます –

+0

確かに、私はあなたのためにそれを今日得るでしょう。 –

+0

これは私があなたのソースページから得た応答ですhttps://imatsandbox.materialise.net/api/demo/cart-item-creation-api.html私は404を手に入れました。 [ここに画像の説明を入力してください](https://i.stack.imgur.com/t4nOx.png)](https://i.stack.imgur.com/t4nOx.png) –

答えて

2

あなたのリクエストが承認されていないことを意味する401が表示されています。私はあなたの要求に資格を渡す必要があると思います。デモAPIにご登録のメールアドレスを渡すことについて、ページの下部にある注意事項を確認してください:あなたがこれを行う必要があるよう https://imatsandbox.materialise.net/api/demo/

はルックス:私はRestClient.postを使用する場合

https://i.materialise.com/web-api/materials?user=<your registered email address here> 
0

私も時々401を取得します、私はあなたがmulpipartを使用する必要がJSONとブロブの混合データを送信するにはResource.new

res = RestClient::Resource.new("http://www.sample.com/some.json",:headers => {'Content-Type' => "application/json"}) 

res.post(json_data) 
2

を使用することによって解決します。

RestClientはすでに

Multipart Implementationを持っており、あなたのソリューションは、次のようになります。

require 'rest-client' 

url = 'https://imatsandbox.materialise.net/web-api/cartitems/register' 
json = '{ 
    "cartItems":[ 
    { 
     "toolID":"d65e1eca-7adf-453d-a3bb-eb051fffb567", 
     "MyCartItemReference":"some reference", 
     "modelID":"62352bab-d490-410c-851d-bc62e056e82a", 
     "modelFileName":"", 
     "fileUnits":"mm", 
     "fileScaleFactor":"1", 
     "materialID":"035f4772-da8a-400b-8be4-2dd344b28ddb", 
     "finishID":"bba2bebb-8895-4049-aeb0-ab651cee2597", 
     "quantity":"1", 
     "xDimMm":"12", 
     "yDimMm":"159.94", 
     "zDimMm":"12", 
     "volumeCm3":"2.0", 
     "surfaceCm2":"100.0", 
     "iMatAPIPrice": "25.0", 
     "mySalesPrice": "26.0", 
    } 
    ], 
    "currency":"EUR" 
}' 

def stringfile(string, filename="file_#{rand 100000}", type=MIME::Types.type_for("json").first.content_type) 
    file = StringIO.new(string) 

    file.instance_variable_set(:@path, filename) 
    def file.path 
    @path 
    end 
    file.instance_variable_set(:@type, type) 
    def file.content_type 
    @type 
    end 

    return file 
end 

response = RestClient.post url, 
    data: stringfile(json), 
    file: [ 
    File.new("./1.png", 'rb') 
    ] 


puts response.body 

response.bodyの結果は次のとおりです。私はそれはあなたを助け願ってい

{ 
"currency": "EUR", 
    "cartItems": [ 
    { 
     "myCartItemReference": "some reference", 
     "cartItemID": "97884fef-d2ae-45e4-a18c-b52b3dcdcb9d", 
     "toolID": "d65e1eca-7adf-453d-a3bb-eb051fffb567", 
     "modelID": "c65278da-8693-4f49-a5c0-8be55a3e63b2", 
     "modelFileName": "The_Club_7plus.obj", 
     "fileUnits": "mm", 
     "fileScaleFactor": 1.0, 
     "materialID": "035f4772-da8a-400b-8be4-2dd344b28ddb", 
     "materialName": "Polyamide", 
     "finishID": "bba2bebb-8895-4049-aeb0-ab651cee2597", 
     "finishName": "Natural-White-Polyamide", 
     "quantity": 1, 
     "xDimMm": 81.2660000000, 
     "yDimMm": 159.9350000000, 
     "zDimMm": 10.0960000000, 
     "volumeCm3": 15.5864000000, 
     "surfaceCm2": 260.2880000000, 
     "iMatAPIPrice": 25.0, 
     "mySalesPrice": 26.0, 
     "mySalesUnitPrice": 26.0, 
     "iMatPrice": 13.61, 
     "validUntil": "2017-09-04T00:00:00+02:00" 
    } 
    ] 
} 

;

+0

上記のコードをコピーしてコピーしてみました/ '{"エラー ":{"メッセージ ":"リクエストボディが間違っています。すべてのパラメータが正しく設定されているかどうかを確認してください "、" code ":401}、" cartItems ":[] } ' あなたはどのようにあなたのために働いた上記のコードを実行しましたか? –

+0

@MichaelVictor貼り付けた内容の 'test.rb'ファイルを作成し、' ruby​​ test.rb'を実行します。 – itsnikolay

+0

@MichaelVictor今エラーが発生しました。確認しましょう – itsnikolay

関連する問題