Python: Urllib.urlopen нечисловой порт - PullRequest
6 голосов
/ 28 июля 2010

для следующего кода

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 ]

6 голосов
/ 21 октября 2011

Вам, вероятно, нужно 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='') для кодирования.

1 голос
/ 28 июля 2010

Я согласен с muckabout, это проблема.Вы, вероятно, привыкли использовать это в браузере, что приведет к аутентификации браузера с хостом.Вам, вероятно, следует отбросить все до первого знака @.

взгляните на urllib docs , в частности на FancyURLOpener, который может решить вашу проблему с аутентификацией.

0 голосов
/ 28 июля 2010

Предполагается, что ':' в URL-адресе HTTP предшествует номеру порта. Вы размещаете имя учетной записи, которое не является числовым. Это должно быть целочисленное значение порта.

0 голосов
/ 28 июля 2010

Сообщение об ошибке показывает, что существует некоторая проблема с URL, который вы готовите. Распечатайте и проверьте, является ли это действительный URL.

...