PIP如何在密码中转义字符#?

Nik*_*nko 7 python pip http-proxy python-3.x

想继续问题 如何让pip在代理服务器后面工作

我有Windows Server和Python 3.5(64).

在密码中,我的用户包括#.

我尝试使用一些解决方法:

"C:\Program Files\Python35\scripts\pip.exe" install --proxy http://proxy_user:pwd#123@proxy.su:1111 TwitterApi

"C:\Program Files\Python35\scripts\pip.exe" install --proxy "http://proxy_user:pwd#123"@proxy.su:1111 TwitterApi

"C:\Program Files\Python35\scripts\pip.exe" install --proxy http://"proxy_user:pwd#123"@proxy.su:1111 TwitterApi

"C:\Program Files\Python35\scripts\pip.exe" install --proxy http://proxy_user:"pwd#123"@proxy.su:1111 TwitterApi

但是得到错误

  File "c:\program files\python35\lib\site-packages\pip\_vendor\requests\package
s\urllib3\util\url.py", line 189, in parse_url
    raise LocationParseError(url)
pip._vendor.requests.packages.urllib3.exceptions.LocationParseError: Failed to p
arse: proxy_user:pwd

在这种情况下如何逃避角色#?

Nab*_*med 6

快速出路:以编码形式输入,即# -> %23

要么

pip处理此问题的更好方法可能是添加一个带有:的--proxy-auth 标志,并在将其添加到代理URL之前对用户进行编码。


问题 -这是不允许的:

严格来说,根据RFC 3986,文字#字符在URI的userinfo部分中无效,应进行百分比编码。但是,许多工具都能很好地处理这一点并不令人惊讶:该字符显然没有任何实际歧义。但是请注意,如果密码中包含@符号,则绝对必须对它进行urlencode:因此,在对密码进行URI编码之前,最好先对其进行urlencode。

在URL中使用'/','#'或'?'给定凭据时,对提交的问题parse_url的响应失败

RFC具体说

授权组件的前面是双斜杠(“ //”),并由下一个斜杠(“ /”),问号(“?”)或数字符号(“ #”)字符或URI的结尾终止。换句话说,当前的行为是正确的,它期望权限被它之后的第一个/(或?或#)发现 终止//。我是否对尝试通过pip使用代理URI的人表示同情?绝对。我认为,一起入侵违反RFC的内容可能会在以后带来令人惊讶的惊喜。