mirror of
https://github.com/jnunemaker/httparty
synced 2023-03-27 23:23:07 -04:00
Fixed support for specifying headers from CLI.
Added support for basic auth from CLI.
This commit is contained in:
parent
8b528632c1
commit
79d9ed6677
2 changed files with 41 additions and 29 deletions
3
History
3
History
|
@ -1,8 +1,9 @@
|
||||||
== 0.2.7 2009-01-28
|
== 0.2.7 2009-01-28
|
||||||
* 2 minor fixes, 1 minor enhancement, 2 major enhancements
|
* 2 minor fixes, 2 minor enhancements, 2 major enhancements
|
||||||
* fixed undefined method add_node for nil class error that occasionally happened (juliocesar)
|
* fixed undefined method add_node for nil class error that occasionally happened (juliocesar)
|
||||||
* Handle nil or unexpected values better when typecasting. (Brian Landau)
|
* Handle nil or unexpected values better when typecasting. (Brian Landau)
|
||||||
* More robust handling of mime types (Alex Vollmer)
|
* More robust handling of mime types (Alex Vollmer)
|
||||||
|
* Fixed support for specifying headers and added support for basic auth to CLI. (Alex Vollmer)
|
||||||
* Added first class response object that includes original body and status code (Alex Vollmer)
|
* Added first class response object that includes original body and status code (Alex Vollmer)
|
||||||
* Now parsing all response types as some non-200 responses provide important information, this means no more exception raising (Alex Vollmer)
|
* Now parsing all response types as some non-200 responses provide important information, this means no more exception raising (Alex Vollmer)
|
||||||
|
|
||||||
|
|
53
bin/httparty
53
bin/httparty
|
@ -10,26 +10,30 @@ require "httparty"
|
||||||
opts = {
|
opts = {
|
||||||
:action => :get,
|
:action => :get,
|
||||||
:headers => {},
|
:headers => {},
|
||||||
:keep_body => true,
|
:verbose => false
|
||||||
:verbose => false,
|
|
||||||
:pretty_print => false
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def die(msg)
|
||||||
|
STDERR.puts(msg)
|
||||||
|
exit 1
|
||||||
|
end
|
||||||
|
|
||||||
OptionParser.new do |o|
|
OptionParser.new do |o|
|
||||||
o.banner = "USAGE: #{$0} [options] [url]"
|
o.banner = "USAGE: #{$0} [options] [url]"
|
||||||
|
|
||||||
o.on("-f",
|
o.on("-f",
|
||||||
"--format [FORMAT]",
|
"--format [FORMAT]",
|
||||||
"Body format: plain, json or xml") do |f|
|
"Output format to use instead of pretty-print ruby: " +
|
||||||
opts[:format] = f.downcase.to_sym
|
"plain, json or xml") do |f|
|
||||||
end
|
opts[:output_format] = f.downcase.to_sym
|
||||||
o.on("-r", "--ruby", "Dump output in Ruby pretty-print format") do |r|
|
|
||||||
opts[:pretty_print] = true
|
|
||||||
end
|
end
|
||||||
|
|
||||||
o.on("-a",
|
o.on("-a",
|
||||||
"--action [ACTION]",
|
"--action [ACTION]",
|
||||||
"HTTP action: get (default), post, put or delete") do |a|
|
"HTTP action: get (default), post, put or delete") do |a|
|
||||||
opts[:action] = a.downcase.to_sym
|
opts[:action] = a.downcase.to_sym
|
||||||
end
|
end
|
||||||
|
|
||||||
o.on("-d",
|
o.on("-d",
|
||||||
"--data [BODY]",
|
"--data [BODY]",
|
||||||
"Data to put in request body (prefix with '@' for file)") do |d|
|
"Data to put in request body (prefix with '@' for file)") do |d|
|
||||||
|
@ -39,13 +43,23 @@ OptionParser.new do |o|
|
||||||
opts[:data] = d
|
opts[:data] = d
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
o.on("-H", "--header [NAME=VALUE]", "Additional HTTP headers in NAME=VALUE form") do |h|
|
o.on("-H", "--header [NAME=VALUE]", "Additional HTTP headers in NAME=VALUE form") do |h|
|
||||||
name, value = h.split('=')
|
die "Invalid header specification, should be Name:Value" unless h =~ /.+:.+/
|
||||||
opts[:headers][name] = value
|
name, value = h.split(':')
|
||||||
|
opts[:headers][name.strip] = value.strip
|
||||||
end
|
end
|
||||||
|
|
||||||
o.on("-v", "--verbose", "If set, print verbose output") do |v|
|
o.on("-v", "--verbose", "If set, print verbose output") do |v|
|
||||||
opts[:verbose] = true
|
opts[:verbose] = true
|
||||||
end
|
end
|
||||||
|
|
||||||
|
o.on("-u", "--user [CREDS]", "Use basic authentication. Value should be user:password") do |u|
|
||||||
|
die "Invalid credentials format. Must be user:password" unless u =~ /.+:.+/
|
||||||
|
user, password = u.split(':')
|
||||||
|
opts[:basic_auth] = { :username => user, :password => password }
|
||||||
|
end
|
||||||
|
|
||||||
o.on("-h", "--help", "Show help documentation") do |h|
|
o.on("-h", "--help", "Show help documentation") do |h|
|
||||||
puts o
|
puts o
|
||||||
exit
|
exit
|
||||||
|
@ -80,24 +94,21 @@ module REXML
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
if opts[:pretty_print] || opts[:format].nil?
|
if opts[:output_format].nil?
|
||||||
pp HTTParty.send(opts[:action], ARGV.first, opts)
|
|
||||||
else
|
|
||||||
print_format = opts[:format]
|
|
||||||
opts.merge!(:format => :plain) if opts[:format]
|
|
||||||
response = HTTParty.send(opts[:action], ARGV.first, opts)
|
response = HTTParty.send(opts[:action], ARGV.first, opts)
|
||||||
|
puts "Status: #{response.code}"
|
||||||
if print_format.nil?
|
|
||||||
pp response
|
pp response
|
||||||
else
|
else
|
||||||
case print_format
|
print_format = opts[:output_format]
|
||||||
|
response = HTTParty.send(opts[:action], ARGV.first, opts)
|
||||||
|
puts "Status: #{response.code}"
|
||||||
|
case opts[:output_format]
|
||||||
when :json
|
when :json
|
||||||
puts JSON.pretty_generate(JSON.parse(response))
|
puts JSON.pretty_generate(response)
|
||||||
when :xml
|
when :xml
|
||||||
REXML::Document.new(response).write(STDOUT, 2)
|
REXML::Document.new(response.body).write(STDOUT, 2)
|
||||||
puts
|
puts
|
||||||
else
|
else
|
||||||
puts response
|
puts response
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
|
Loading…
Add table
Reference in a new issue