curl command equivalent in ruby
Asked Answered
H

3

10

I have a curl command that works well, but I need to automate this in a ruby script,

curl cmd:

curl -u usrname:pwd -X POST --data "del=false&val=100" http://localhost:1111/sample/path

I wrote the following code:

uri = URI::HTTPS.build(:host => "localhost", :port => 1111)
uri.path = URI.escape("/sample/path")
client = Net::HTTP.new("localhost", "1111")
req = Net::HTTP::Post.new(uri.request_uri, {"User-Agent" => "UA"})
req.set_form_data({"del" => "false", "val" => "100"})
req.basic_auth("usrname", "pwd")
res = client.request(req)

The above code is working, I had a encoded url that I was passing to URI.escape, that made me post this question about bad response. Foud the issue and fixed it :)

Halfback answered 30/1, 2014 at 19:41 Comment(1)
I believe this answer delivers what you're asking for.Withindoors
F
29

THE BEST & EASY SOLUTION!!

  1. Copy your CURL code.

  2. Go to this page.

  3. Paste your CURL code.

  4. Be happy.

I tested this solution this page its amazing.

Fuller answered 5/9, 2017 at 15:40 Comment(2)
This is a really good solution, its a applicable solution for this especific question and other group of similars questions. Ill be happy if know the reason for negative votes for my answer.Fuller
Note: Does not work with all curl arguments. No -F for example.Chibouk
H
9

you can execute the curl command directly from ruby

usrname = "username"
pwd = "pwd"
val = 100
del= false
http_path = "http://localhost:1111/sample/path"
puts `curl -u #{usrname}:#{pwd} -X POST --data "del=#{del}&val=#{va}" #{http_path}`

and the back ticks will execute the system curl

Hilarity answered 30/1, 2014 at 20:14 Comment(3)
I am looking to do a http post in ruby instead of making to do a system call for curlHalfback
curl is platform dependent. also, you shouldn't suggest command line solutions when the language itself has a solutionBoughton
That's an absolute and much like everything else in programming its entirely dependent on context and what you are trying to do.Hilarity
H
5

You can use curb

c = Curl::Easy.new

c.http_auth_types = :basic
c.username = 'usrname'
c.password = 'pwd'

c.http_post("http://localhost:1111/sample/path", "del=false&val=100")
Hilarity answered 30/1, 2014 at 20:29 Comment(1)
use this documentation to find the equivalents of the parameters you need rubydoc.info/github/taf2/curb/Curl/EasyBlintz

© 2022 - 2024 — McMap. All rights reserved.