mirror of
https://github.com/httpie/cli.git
synced 2025-03-13 14:28:50 +01:00
Merge 71b1e0a161
into 5b604c37c6
This commit is contained in:
commit
dc034d6fbc
@ -203,6 +203,8 @@ class HTTPieArgumentParser(BaseHTTPieArgumentParser):
|
||||
}
|
||||
|
||||
def _process_url(self):
|
||||
self.args.url = self.args.base_url + self.args.url
|
||||
|
||||
if self.args.url.startswith('://'):
|
||||
# Paste URL & add space shortcut: `http ://pie.dev` → `http://pie.dev`
|
||||
self.args.url = self.args.url[3:]
|
||||
@ -412,39 +414,11 @@ class HTTPieArgumentParser(BaseHTTPieArgumentParser):
|
||||
|
||||
"""
|
||||
if self.args.method is None:
|
||||
# Invoked as `http URL'.
|
||||
assert not self.args.request_items
|
||||
if self.has_input_data:
|
||||
self.args.method = HTTP_POST
|
||||
else:
|
||||
self.args.method = HTTP_GET
|
||||
|
||||
# FIXME: False positive, e.g., "localhost" matches but is a valid URL.
|
||||
elif not re.match('^[a-zA-Z]+$', self.args.method):
|
||||
# Invoked as `http URL item+'. The URL is now in `args.method`
|
||||
# and the first ITEM is now incorrectly in `args.url`.
|
||||
try:
|
||||
# Parse the URL as an ITEM and store it as the first ITEM arg.
|
||||
self.args.request_items.insert(0, KeyValueArgType(
|
||||
*SEPARATOR_GROUP_ALL_ITEMS).__call__(self.args.url))
|
||||
|
||||
except argparse.ArgumentTypeError as e:
|
||||
if self.args.traceback:
|
||||
raise
|
||||
self.error(e.args[0])
|
||||
|
||||
else:
|
||||
# Set the URL correctly
|
||||
self.args.url = self.args.method
|
||||
# Infer the method
|
||||
has_data = (
|
||||
self.has_input_data
|
||||
or any(
|
||||
item.sep in SEPARATOR_GROUP_DATA_ITEMS
|
||||
for item in self.args.request_items)
|
||||
)
|
||||
self.args.method = HTTP_POST if has_data else HTTP_GET
|
||||
|
||||
def _parse_items(self):
|
||||
"""
|
||||
Parse `args.request_items` into `args.headers`, `args.data`,
|
||||
|
@ -53,24 +53,6 @@ positional_arguments = options.add_group(
|
||||
Only URL is required.
|
||||
""",
|
||||
)
|
||||
|
||||
positional_arguments.add_argument(
|
||||
dest='method',
|
||||
metavar='METHOD',
|
||||
nargs=Qualifiers.OPTIONAL,
|
||||
default=None,
|
||||
short_help='The HTTP method to be used for the request (GET, POST, PUT, DELETE, ...).',
|
||||
help="""
|
||||
The HTTP method to be used for the request (GET, POST, PUT, DELETE, ...).
|
||||
|
||||
This argument can be omitted in which case HTTPie will use POST if there
|
||||
is some data to be sent, otherwise GET:
|
||||
|
||||
$ http example.org # => GET
|
||||
$ http example.org hello=world # => POST
|
||||
|
||||
""",
|
||||
)
|
||||
positional_arguments.add_argument(
|
||||
dest='url',
|
||||
metavar='URL',
|
||||
@ -84,6 +66,8 @@ positional_arguments.add_argument(
|
||||
$ http :3000 # => http://localhost:3000
|
||||
$ http :/foo # => http://localhost/foo
|
||||
|
||||
Prefixed with --base-url before default scheme or shorthand processing take place.
|
||||
|
||||
""",
|
||||
)
|
||||
positional_arguments.add_argument(
|
||||
@ -705,12 +689,39 @@ authentication.add_argument(
|
||||
|
||||
network = options.add_group('Network')
|
||||
|
||||
network.add_argument(
|
||||
'--method',
|
||||
'-X',
|
||||
metavar='METHOD',
|
||||
default=None,
|
||||
short_help='The HTTP method to be used for the request (GET, POST, PUT, DELETE, ...).',
|
||||
help="""
|
||||
The HTTP method to be used for the request (GET, POST, PUT, DELETE, ...).
|
||||
|
||||
This argument can be omitted in which case HTTPie will use POST if there
|
||||
is some data to be sent, otherwise GET:
|
||||
|
||||
$ http example.org # => GET
|
||||
$ http example.org hello=world # => POST
|
||||
|
||||
""",
|
||||
)
|
||||
network.add_argument(
|
||||
'--offline',
|
||||
default=False,
|
||||
action='store_true',
|
||||
short_help='Build the request and print it but don’t actually send it.'
|
||||
)
|
||||
network.add_argument(
|
||||
'--base-url',
|
||||
default='',
|
||||
short_help='String to prepend to the request URL.',
|
||||
help="""
|
||||
String to prepend to the request URL before --default-scheme and/or localhost
|
||||
shorthand are processed. If specified multiple times, last value is used.
|
||||
|
||||
"""
|
||||
)
|
||||
network.add_argument(
|
||||
'--proxy',
|
||||
default=[],
|
||||
|
@ -375,3 +375,8 @@ class TestSchemes:
|
||||
def test_scheme_when_invoked_as_https(self, httpbin_secure):
|
||||
url = f'{httpbin_secure.host}:{httpbin_secure.port}'
|
||||
assert HTTP_OK in http(url, program_name='https')
|
||||
|
||||
|
||||
class TestBaseUrl:
|
||||
def test_base_url(self):
|
||||
assert False, 'Needs tests'
|
||||
|
Loading…
Reference in New Issue
Block a user