Skip to content

Conversation

@ns-fboucault
Copy link

Description

Fixes #1623

HTTPie now properly decodes percent-encoded characters in the username and password when they are provided in the URL's userinfo section.

This allows credentials containing special characters like @, =, and ? to be specified directly in URLs by percent-encoding them, matching the behavior of other HTTP clients like curl.

Changes

  • Modified httpie/cli/argparser.py to use urllib.parse.unquote() to decode username and password from URLs
  • Added test test_percent_encoded_credentials_in_url() to verify the fix

Example

This now works correctly:

http https://u%40d:1%3d2%3f@httpbin.org/basic-auth/u%40d/1%3d2%3f

Where u%40d decodes to u@d and 1%3d2%3f decodes to 1=2?

Testing

  • ✅ All existing auth tests pass (31 tests)
  • ✅ New test covers the reported issue
  • ✅ Manually verified with httpbin.org
  • ✅ Backward compatible (non-encoded credentials still work)

Checklist

  • Tests added/updated
  • All tests passing
  • No breaking changes
  • Follows existing code style

Add automated tests that reproduce the bug where HTTPie fails to decode
percent-encoded characters in URL credentials (username and password).

The tests verify that credentials containing special characters like @, =, ?,
:, and / should be properly decoded when provided in the URL's userinfo section.

Currently all tests fail with 401 UNAUTHORIZED, confirming the bug exists.

Related to: httpie#1623
HTTPie now properly decodes percent-encoded characters in the username
and password when they are provided in the URL's userinfo section.

This allows credentials containing special characters like @, =, and ?
to be specified directly in URLs by percent-encoding them.

Example that now works:
  http https://u%40d:1%3d2%3f@httpbin.org/basic-auth/u%40d/1%3d2%3f

The fix uses urllib.parse.unquote() to decode the username and password
extracted from the URL before using them for authentication.

Fixes: httpie#1623
Remove trailing whitespace on blank lines and extra blank lines at end of file.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Username/password in the URL not decoded when used for basic authentication

1 participant