2015-10-25 21 views
6

Tôi đang cố gắng bắt chước yêu cầu curl bằng cách sử dụng đá quý RestClient Ruby, và cho đến nay, tôi đã gặp rất nhiều rắc rối khi cố gắng gửi tải trọng. yêu cầu curl của tôi trông giống như sauCách gửi dữ liệu trong yêu cầu đăng bằng RestClient

curl URL -X POST -u API_KEY -d '{"param_1": "1"}'

Tôi đã cố gắng để tái tạo này với RestClient sử dụng một cái gì đó như thế này:

RestClient::Request.execute(method: :post, url: URL, user: API_KEY, payload: {"param_1" => "1"})

Than ôi, tôi tiếp tục nhận được 400 - Các yêu cầu Bad lỗi khi làm điều này. Tôi có đang gửi dữ liệu sai đường không? Tôi có nên sử dụng thứ gì khác ngoài tải trọng không?

Trả lời

6

Thay đổi:

payload: {"param_1" => "1"}) 

Để:

payload: '{"param_1": "1"})' 

Ngoài ra, xác định headers.

Vì vậy, nó trở thành:

RestClient::Request.execute(method: :post, 
          url: 'your_url', 
          user: 'API_KEY', 
          payload: '{"param_1": "1"}', 
          headers: {"Content-Type" => "application/json"} 
          ) 
+0

Tất cả mọi thứ đang làm việc tốt với cURL. Tôi tò mò làm thế nào tôi muốn thực hiện các truy vấn tương đương với RestClient – rboling

+0

Cảm ơn sự giúp đỡ! Cuối cùng, tôi đã phải vượt qua trong một cuộc tranh luận để làm rõ rằng dữ liệu của tôi đã được gửi qua trong JSON. – rboling

+0

Có, bạn có một vấn đề khác mà 'payload' của bạn không phải là một chuỗi, nó là một băm. Câu trả lời của tôi giải quyết vấn đề đó. Ngoài ra, nếu nó không hoạt động, thì tôi sẽ yêu cầu bạn thêm tùy chọn 'headers' vào yêu cầu. Nhưng bạn đã làm điều đó, điều tuyệt vời :) –

1

Hóa ra tôi đã có thêm một cuộc tranh cãi để xác định rằng dữ liệu của tôi là trong một định dạng JSON. Câu trả lời đúng là một cái gì đó như thế này: RestClient::Request.execute(method: :post, url: URL, user: API_KEY, payload: '{"param_1": "1"}', headers: {"Content-Type" => "application/json"})

+0

bạn có thể kiểm tra đánh dấu câu trả lời của @K M Rakibul Islam; Rboling – illusionist

2

Chỉ cần thay đổi:

payload: {"param_1" => "1"} 

Để:

payload: {"param_1" => "1"}.to_json 

Vì vậy, sau đó nó trở thành:

RestClient::Request.execute(method: :post, 
          url: 'your_url', 
          user: 'API_KEY', 
          payload: {"param_1" => "1"}.to_json, 
          headers: {"Content-Type" => "application/json"} 
          ) 
Các vấn đề liên quan