दिलचस्प पोस्ट
एक MySQL क्वेरी को सीएसवी में कनवर्ट करने के लिए PHP कोड युनिकोड स्ट्रिंग को स्ट्रिंग में पायथन में कनवर्ट करें (अतिरिक्त प्रतीकों वाले) Setup.py क्या है? डुप्लीकेट पंक्तियों का इस्तेमाल करके dplyr निकालें जावास्क्रिप्ट में बच्चों और बच्चों के बीच अंतर क्या है? क्या MySQL FIND_IN_SET या समकक्ष सूचकांकों का उपयोग करने के लिए किया जा सकता है? एंड्रॉइड के साथ WCF सेवा कैसे खपत करें जावास्क्रिप्ट – मैं स्क्रिप्ट का यूआरएल कैसे प्राप्त करूं? मैं शेल स्क्रिप्ट को "sh" या "bash" कमांड का उपयोग किए बिना कैसे चला सकता हूं? हिब्रू पाठ के लिए टेक्स्टव्यू के साथ एंड्रॉइड सेटिंग? एंड्रॉइड 2.2.1, 2.3, 2.0 में टुकड़े। क्या यह संभव है? गीद – पूर्ववत धक्का दिया इकाई फ़्रेमवर्क प्रसंग लाइफटाइम के बारे में सवाल जेडीबीसी के साथ बैच इन्टरेट करने के लिए कुशल तरीके से MySQL त्रुटि 1153 – 'max_allowed_packet' बाइट्स से बड़ा पैकेट मिला

पायथन urllib2 बेसिक एथ समस्या

अपडेट: ली की टिप्पणी के आधार पर मैंने अपने कोड को वास्तव में सरल लिपि में संक्षिप्त करने और उसे कमांड लाइन से चलाने का निर्णय लिया:

import urllib2 import sys username = sys.argv[1] password = sys.argv[2] url = sys.argv[3] print("calling %s with %s:%s\n" % (url, username, password)) passman = urllib2.HTTPPasswordMgrWithDefaultRealm() passman.add_password(None, url, username, password) urllib2.install_opener(urllib2.build_opener(urllib2.HTTPBasicAuthHandler(passman))) req = urllib2.Request(url) f = urllib2.urlopen(req) data = f.read() print(data) 

दुर्भाग्यवश यह अभी भी Authorization शीर्षलेख (प्रति वायरशर्क) उत्पन्न नहीं करेगा 🙁

मुझे urllib2 पर बुनियादी AUTH भेजने में समस्या हो रही है मैंने इस लेख पर एक नज़र लिया और उदाहरण का पालन किया। मेरा कोड:

 passman = urllib2.HTTPPasswordMgrWithDefaultRealm() passman.add_password(None, "api.foursquare.com", username, password) urllib2.install_opener(urllib2.build_opener(urllib2.HTTPBasicAuthHandler(passman))) req = urllib2.Request("http://api.foursquare.com/v1/user") f = urllib2.urlopen(req) data = f.read() 

मैं वायर्ड हार्क के माध्यम से वायर पर निम्नलिखित देख रहा हूं:

 GET /v1/user HTTP/1.1 Host: api.foursquare.com Connection: close Accept-Encoding: gzip User-Agent: Python-urllib/2.5 

आप देख सकते हैं कि प्राधिकरण भेजा नहीं है, बनाम जब मैं कर्ल के माध्यम से अनुरोध भेजता हूं: curl -u user:password http://api.foursquare.com/v1/user

 GET /v1/user HTTP/1.1 Authorization: Basic =SNIP= User-Agent: curl/7.19.4 (universal-apple-darwin10.0) libcurl/7.19.4 OpenSSL/0.9.8k zlib/1.2.3 Host: api.foursquare.com Accept: */* 

किसी कारण के लिए मेरा कोड प्रमाणीकरण नहीं भेजता है – कोई भी मुझे देखता है कि मुझे क्या याद आ रहा है?

धन्यवाद

-simon

वेब के समाधान से एकत्रित समाधान "पायथन urllib2 बेसिक एथ समस्या"

समस्या यह हो सकती है कि प्रति HTTP- मानक, पहले पायथन पुस्तकालयों, एक अप्रमाणित अनुरोध भेजते हैं, और उसके बाद केवल 401 पुनः प्रयास के साथ उत्तर दिए जाने पर, सही क्रेडेंशियल्स भेजे गए हैं अगर चौकोर सर्वर "पूरी तरह से मानक प्रमाणीकरण" नहीं करते हैं, तो पुस्तकालय काम नहीं करेगा।

प्रमाणीकरण करने के लिए हेडर उपयोग करने का प्रयास करें:

 import urllib2, base64 request = urllib2.Request("http://api.foursquare.com/v1/user") base64string = base64.b64encode('%s:%s' % (username, password)) request.add_header("Authorization", "Basic %s" % base64string) result = urllib2.urlopen(request) 

आपके जैसे ही समस्या थी और इस धागे से समाधान मिला: http://forums.shopify.com/categories/9/posts/27662

दूसरा पैरामीटर एक यूआरआई होना चाहिए, एक डोमेन नाम नहीं होना चाहिए। अर्थात

 passman = urllib2.HTTPPasswordMgrWithDefaultRealm() passman.add_password(None, "http://api.foursquare.com/", username, password) 

(कॉपी-पेस्ट / https://stackoverflow.com/a/24048772/1733117 से अनुकूलित)।

पहले आप urllib2.BaseHandler या urllib2.HTTPBasicAuthHandler subclass कर सकते हैं, और http_request कार्यान्वित http_request ताकि प्रत्येक अनुरोध में उचित Authorization शीर्षलेख हो।

 import urllib2 import base64 class PreemptiveBasicAuthHandler(urllib2.HTTPBasicAuthHandler): '''Preemptive basic auth. Instead of waiting for a 403 to then retry with the credentials, send the credentials if the url is handled by the password manager. Note: please use realm=None when calling add_password.''' def http_request(self, req): url = req.get_full_url() realm = None # this is very similar to the code from retry_http_basic_auth() # but returns a request object. user, pw = self.passwd.find_user_password(realm, url) if pw: raw = "%s:%s" % (user, pw) auth = 'Basic %s' % base64.b64encode(raw).strip() req.add_unredirected_header(self.auth_header, auth) return req https_request = http_request 

फिर यदि आप मेरे जैसे आलसी हैं, तो दुनिया भर में हैंडलर स्थापित करें

 api_url = "http://api.foursquare.com/" api_username = "johndoe" api_password = "some-cryptic-value" auth_handler = PreemptiveBasicAuthHandler() auth_handler.add_password( realm=None, # default realm. uri=api_url, user=api_username, passwd=api_password) opener = urllib2.build_opener(auth_handler) urllib2.install_opener(opener) 

मेलचिप के एपीआई तक पहुंचने की कोशिश करते हुए मुझे इसी तरह की समस्या से निपटने के लिए उपयोग किया जा रहा है। यह वही काम करता है, सिर्फ अच्छे स्वरूपित है

 import urllib2 import base64 chimpConfig = { "headers" : { "Content-Type": "application/json", "Authorization": "Basic " + base64.encodestring("hayden:MYSECRETAPIKEY").replace('\n', '') }, "url": 'https://us12.api.mailchimp.com/3.0/'} #perform authentication datas = None request = urllib2.Request(chimpConfig["url"], datas, chimpConfig["headers"]) result = urllib2.urlopen(request) 

मेरा सुझाव है कि वर्तमान समाधान मेरे पैकेज urllib2_prior_auth का उपयोग करना है जो यह बहुत अच्छी तरह से हल करता है (मैं मानक लिब में शामिल करने पर काम करता हूं।