diff --git a/README.md b/README.md index 065a37b..1f15b4a 100644 --- a/README.md +++ b/README.md @@ -5,8 +5,7 @@ running `curl | bash` ## Work in Progress -`netrun` is still experimental; don't rely on its working properly. In -particular, HTTP response codes are ignored (see #1). +`netrun` is still experimental; don't rely on its working properly. ## Try it diff --git a/netrun.py b/netrun.py index 1fc7089..f9516ae 100755 --- a/netrun.py +++ b/netrun.py @@ -65,9 +65,28 @@ url = args.url pager = shlex.split(args.pager) interpreter = shlex.split(args.interpreter) -if not args.quiet: - print(f"Downloading `{url}`...") -content = requests.get(url).content +while True: + if not args.quiet: + print(f"Downloading `{url}`...") + + response = requests.get(url, allow_redirects=False) + + if response.status_code == 200: + content = response.content + break + + else: + try: + print(f"{response.status_code} {response.reason} (redirect to `{response.headers['location']}`)") + if yn("Do you want to follow this redirect?") == 'y': + url = response.headers['location'] + else: + print("Not redirecting.") + sys.exit(0) + except KeyError: + print(f"Download failed: {response.status_code} {response.reason}") + sys.exit(0) + if not args.quiet: print("Download successful.") print("=" * os.get_terminal_size().columns)