मेरे पास एक स्क्रिप्ट है जिसका उपयोग मैं जारी रखना जारी रखना चाहता हूं, लेकिन ऐसा लगता है कि मुझे या तो पाइथन 3 में एक बग के लिए कुछ कामकाज मिलना है, या वापस 2.6 पर डाउनग्रेड करना है, और इस प्रकार अन्य स्क्रिप्ट को डाउनग्रेड करना भी है ..पाइथन 3.0 में प्राधिकरण के साथ http पर एक फ़ाइल कैसे डाउनलोड करें, बग के आसपास काम कर रहे हैं?
उम्मीद है कि यहां कोई व्यक्ति पहले से ही एक कामकाज खोजने में कामयाब रहा है।
समस्या यह है कि पाइथन 3.0 में बाइट्स और तारों के संबंध में नए बदलावों के कारण, सभी पुस्तकालय कोड स्पष्ट रूप से परीक्षण नहीं किए जाते हैं।
मेरे पास एक स्क्रिप्ट है जो वेब सर्वर से एक पृष्ठ डाउनलोड करती है। इस स्क्रिप्ट ने पायथन 2.6 में यूआरएल के हिस्से के रूप में उपयोगकर्ता नाम और पासवर्ड पारित किया है, लेकिन पायथन 3.0 में, यह अब और काम नहीं करता है।
उदाहरण के लिए, इस:
import urllib.request;
url = "http://username:[email protected]/file";
urllib.request.urlretrieve(url, "temp.dat");
इस अपवाद के साथ विफल रहता है:
Traceback (most recent call last):
File "C:\Temp\test.py", line 5, in <module>
urllib.request.urlretrieve(url, "test.html");
File "C:\Python30\lib\urllib\request.py", line 134, in urlretrieve
return _urlopener.retrieve(url, filename, reporthook, data)
File "C:\Python30\lib\urllib\request.py", line 1476, in retrieve
fp = self.open(url, data)
File "C:\Python30\lib\urllib\request.py", line 1444, in open
return getattr(self, name)(url)
File "C:\Python30\lib\urllib\request.py", line 1618, in open_http
return self._open_generic_http(http.client.HTTPConnection, url, data)
File "C:\Python30\lib\urllib\request.py", line 1576, in _open_generic_http
auth = base64.b64encode(user_passwd).strip()
File "C:\Python30\lib\base64.py", line 56, in b64encode
raise TypeError("expected bytes, not %s" % s.__class__.__name__)
TypeError: expected bytes, not str
जाहिर है, बेस 64 एन्कोडिंग अब बाइट में की जरूरत है और एक स्ट्रिंग आउटपुट, और इस तरह urlretrieve (या उसमें कुछ कोड) जो उपयोगकर्ता नाम की एक स्ट्रिंग बनाता है: पासवर्ड, और सरल प्रमाणीकरण के लिए बेस 64-एन्कोड करने की कोशिश करता है, विफल रहता है।
मैं बजाय, urlopen उपयोग करने के लिए इस तरह का प्रयास करें:
import urllib.request;
url = "http://username:[email protected]/file";
f = urllib.request.urlopen(url);
contents = f.read();
फिर
यह इस अपवाद के साथ विफल रहता है:
Traceback (most recent call last):
File "C:\Temp\test.py", line 5, in <module>
f = urllib.request.urlopen(url);
File "C:\Python30\lib\urllib\request.py", line 122, in urlopen
return _opener.open(url, data, timeout)
File "C:\Python30\lib\urllib\request.py", line 359, in open
response = self._open(req, data)
File "C:\Python30\lib\urllib\request.py", line 377, in _open
'_open', req)
File "C:\Python30\lib\urllib\request.py", line 337, in _call_chain
result = func(*args)
File "C:\Python30\lib\urllib\request.py", line 1082, in http_open
return self.do_open(http.client.HTTPConnection, req)
File "C:\Python30\lib\urllib\request.py", line 1051, in do_open
h = http_class(host, timeout=req.timeout) # will parse host:port
File "C:\Python30\lib\http\client.py", line 620, in __init__
self._set_hostport(host, port)
File "C:\Python30\lib\http\client.py", line 632, in _set_hostport
raise InvalidURL("nonnumeric port: '%s'" % host[i+1:])
http.client.InvalidURL: nonnumeric port: '[email protected]'
जाहिर यूआरएल इस "अगले जनरल यूआरएल पुनर्प्राप्ति पुस्तकालय" में पार्स करने नहीं करता है यूआरएल में उपयोगकर्ता नाम और पासवर्ड के साथ क्या करना है पता नहीं है।
मेरे पास अन्य विकल्प क्या हैं?
क्या आप उस पासवर्ड को पोस्ट करना चाहते थे? यदि नहीं, तो मैं जवाब हटाने और वहां एक डमी डेटा के साथ एक नया पोस्ट करने का सुझाव देता हूं। हालांकि उत्तर के लिए धन्यवाद, यह आशाजनक लग रहा है। –
पायथन डॉक्स से सीधे: पी –
क्लेम शायद उसका असली पासवर्ड है अगर वह उसका असली पासवर्ड है :) –