我正在玩Python并且有一个我正在尝试使用的URL,就像这样
https://[username@domain.com]:[password]@domain.com/blah
这是我的代码:
response =urllib2.urlopen("https://[username@domain.com]:[password]@domain.com/blah")
html = response.read()
print ("data="+html)
这不是经过,它不喜欢@符号,也可能是:也是。我试着搜索,然后读了一些关于unquote的内容,但那没有做任何事情。这是我得到的错误:
raise InvalidURL("nonnumeric port: '%s'" % host[i+1:])
httplib.InvalidURL: nonnumeric port: 'password@updates.opendns.com'
我如何解决这个问题?实际网站为“https://updates.opendns.com/nic/update?hostname=
谢谢你!答案 0 :(得分:1)
URI有一堆保留字符,分隔URI的可区分部分(/
,?
,&
,@
和few others)。如果这些字符中的任何一个出现在用户名(在您的情况下为@
)或密码中,则它们需要进行百分比编码或URI变为无效。
在Python 3中:
>>> from urllib import parse
>>> parse.quote("p@ssword?")
'p%40ssword%3F'
在Python 2中:
>>> import urllib
>>> urllib.quote("p@ssword?")
'p%40ssword%3F'
另外,请勿将用户名和密码放在方括号中,这也无效。
答案 1 :(得分:0)
使用urlencode!不确定urllib2是否有它,但是urllib有一个urlencode函数。一秒钟,我会回复你。
我做了一个快速检查,似乎你需要使用urrlib而不是urllib2 ...导入urllib然后使用urllib.urlencode(你的URL)应该可以工作!
import urllib
url = urllib.urlencode(<your_url_here>)
编辑:它实际上是urlllib2.quote()!