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

私はマックアバウトに同意します、これが問題です。おそらくブラウザでこれを使用することに慣れているでしょう。これにより、ブラウザがホストで認証されるようになります。おそらく最初の@記号の前にすべてをドロップする必要があります。

urllibのドキュメント、特に認証の問題を解決する可能性のあるFancyURLOpenerをご覧ください。

于 2010-07-28T09:08:25.603 に答える
0

エラー メッセージは、準備中の URL に問題があることを示しています。これが有効な URL であるかどうかを印刷して確認します。

于 2010-07-28T09:01:38.980 に答える
0

HTTP URL の「:」は、ポート番号の前にあると見なされます。数字以外のアカウント名を配置しています。整数のポート値である必要があります。

于 2010-07-28T09:03:44.717 に答える