From 2ebd5b30473d9b25933de39ce856f85e1a503861 Mon Sep 17 00:00:00 2001 From: insouciantVigilante Date: Sun, 15 Mar 2026 23:20:04 +0530 Subject: [PATCH] fix: Allow options to appear before URL (#1592) --- httpie/cli/argparser.py | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/httpie/cli/argparser.py b/httpie/cli/argparser.py index 9bf09b3b73..0d493de580 100644 --- a/httpie/cli/argparser.py +++ b/httpie/cli/argparser.py @@ -148,14 +148,28 @@ def __init__(self, *args, formatter_class=HTTPieHelpFormatter, **kwargs): super().__init__(*args, formatter_class=formatter_class, **kwargs) # noinspection PyMethodOverriding + # In parse_args method def parse_args( - self, - env: Environment, - args=None, - namespace=None + self, env: Environment, args=None, namespace=None ) -> argparse.Namespace: self.env = env self.env.args = namespace = namespace or argparse.Namespace() + # Manually reorder args to handle options appearing before the URL. + # Fix for Issue #1592. + if args is None: + args = sys.argv[1:] + + new_args = [] + positionals = [] + for arg in args: + if not arg.startswith('-'): + positionals.append(arg) + else: + new_args.append(arg) + + # Put the collected positionals at the front, then the optionals. + args = positionals + new_args + self.args, no_options = super().parse_known_args(args, namespace) if self.args.debug: self.args.traceback = True