diff --git a/httpie/cli/argparser.py b/httpie/cli/argparser.py index a1c27d2419..ad71931d11 100644 --- a/httpie/cli/argparser.py +++ b/httpie/cli/argparser.py @@ -414,39 +414,11 @@ def _guess_method(self): """ 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`, diff --git a/httpie/cli/definition.py b/httpie/cli/definition.py index e3658a994c..1d7af51ac2 100644 --- a/httpie/cli/definition.py +++ b/httpie/cli/definition.py @@ -50,24 +50,6 @@ 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', @@ -709,6 +691,23 @@ def format_auth_help(auth_plugins_mapping, *, isolation_mode: bool = False): 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,