6

对于以下代码

theurl = "https://%s:%s@members.dyndns.org/nic/update?hostname=%s&myip=%s&wildcard=NOCHG&mx=NOCHG&backmx=NOCHG" % (username, password, hostname, theip)

conn = urlopen(theurl) # send the request to the url
print(conn.read())  # read the response
conn.close()   # close the connection

我收到以下错误

File "c:\Python31\lib\http\client.py", line 667, in _set_hostport
    raise InvalidURL("nonnumeric port: '%s'" % host[i+1:])

有任何想法吗???

4

4 回答 4

6

您可能需要对密码进行 url 编码。如果密码恰好包含“/”,您将看到类似的错误。

这是一个本地示例(实际值已编辑):

>>> opener
<urllib.FancyURLopener instance at 0xb6f0e2ac>
>>> opener.open('http://admin:somepass@example.com')
<addinfourl at 3068618924L whose fp = <socket._fileobject object at 0xb6e7596c>>
>>> opener.open('http://admin:somepass/a@example.com')
*** InvalidURL: nonnumeric port: 'somepass'

对密码进行编码:

>>> opener.open('http://admin:somepass%2Fa@example.com')

您可以使用urllib.quote('somepass/a', safe='')来进行编码。

于 2011-10-21T12:03:24.397 回答
1

我同意muckabout,这就是问题所在。您可能习惯于在浏览器中使用它,这会导致浏览器与主机进行身份验证。您可能应该在第一个 @ 符号之前删除所有内容。

查看urllib 文档,特别是 FancyURLOpener,它可能会解决您的身份验证问题。

于 2010-07-28T09:08:25.603 回答
0

假定 HTTP URL 中的 ':' 位于端口号之前。您正在放置一个非数字的帐户名称。它必须是整数端口值。

于 2010-07-28T09:03:44.717 回答
0

错误消息表明您正在准备的 url 存在一些问题。打印并检查这是否是一个有效的 url。

于 2010-07-28T09:01:38.980 回答