Python: Urllib.urlopen nonnumeric port
for the following cod开发者_如何学Pythone
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
i get the following error
File "c:\Python31\lib\http\client.py", line 667, in _set_hostport
raise InvalidURL("nonnumeric port: '%s'" % host[i+1:])
Any Ideas???
You probably need to url-encode the password. You'll see an error like that if the password happens to contain a '/'.
Here's a local example (actual values redacted):
>>> 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'
Encode the password:
>>> opener.open('http://admin:somepass%2Fa@example.com')
You can use urllib.quote('somepass/a', safe='')
to do the encoding.
I agree with muckabout, this is the problem. You're probably used to using this in a browser, which would cause the browser to authenticate with the host. You should probably drop everything before the first @ sign.
have a look at urllib docs, specifically FancyURLOpener which might resolve your issue with authentication.
The error message shows that there is some issue with the url that you are preparing. Print and check if this is a valid url.
The ':' in the HTTP URL is assumed to precede a port number. You are placing an account name which is not numeric. It must be an integer port value.
精彩评论