2010-07-28 12 views
6

निम्नलिखित कोडपायथन: Urllib.urlopen असांख्यिक बंदरगाह

theurl = "https://%s:%[email protected]/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:]) 

किसी भी विचार पाने के लिए ???

उत्तर

0

त्रुटि संदेश से पता चलता है कि यूआरएल के साथ कुछ समस्या है जिसे आप तैयार कर रहे हैं। प्रिंट करें और जांचें कि यह वैध यूआरएल है या नहीं।

+0

इसे प्रिंट क्यों करें? उन्होंने इसे प्रश्न में पोस्ट किया है। मुद्दा यूआरएल में ': 'है जो मकबॉउट ने उल्लेख किया है। –

0

HTTP यूआरएल में ':' को पोर्ट नंबर से पहले माना जाता है। आप एक खाता नाम रख रहे हैं जो संख्यात्मक नहीं है। यह एक पूर्णांक पोर्ट मान होना चाहिए।

+0

इसके अतिरिक्त, आपको देखना चाहिए कि उनके पास एक वेब आधारित एपीआई है जिसे आप प्रोग्रामेटिक रूप से उपयोग कर सकते हैं। –

+10

यह गलत है। ऐसे तीन स्थान हैं जिनमें ':' महत्वपूर्ण हैं। प्रोटोकॉल के बाद, उपयोगकर्ता नाम के बाद, और डोमेन के बाद। तीसरे स्थान पर यह बंदरगाह संख्या से पहले है। दूसरी जगह (जैसा कि यहां उपयोग किया जाता है) यह पासवर्ड से पहले है। –

1

मैं muckabout से सहमत हूं, यह समस्या है। आप शायद ब्राउज़र में इसका उपयोग करने के लिए उपयोग किए जाते हैं, जिससे ब्राउज़र होस्ट के साथ प्रमाणित हो जाता है। आपको पहले @ साइन से पहले सबकुछ छोड़ना चाहिए।

urllib docs पर विशेष रूप से देखें, विशेष रूप से FancyURLOpener जो प्रमाणीकरण के साथ आपकी समस्या का समाधान कर सकता है।

6

आपको शायद पासवर्ड को यूआरएल-एन्कोड करने की आवश्यकता है। यदि पासवर्ड में '/' होना होता है तो आपको उस तरह की एक त्रुटि दिखाई देगी।

यहाँ एक स्थानीय उदाहरण है (वास्तविक मान संशोधित):

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

एनकोड पासवर्ड:

>>> opener.open('http://admin:somepass%[email protected]') 

आप urllib.quote('somepass/a', safe='') उपयोग कर सकते हैं एन्कोडिंग करना है।

+0

यह सही जवाब है - मैं मूर्खता से अपने '/' चरित्र से नहीं बच पाया, इसलिए 'सुरक्षित =' '' मेरे लिए काम किया, टीवाई :) –