2011-01-12 8 views
6

मैं authorize.net पर क्रेडिट कार्ड जानकारी भेजने के लिए httplib का उपयोग करने की कोशिश कर रहा हूं। जब मैं अनुरोध पोस्ट करने की कोशिश, मैं निम्नलिखित ट्रैसबैक मिलती है:पायथन प्रेजेंटप्लिब नाम या सेवा ज्ञात नहीं है

File "./lib/cgi_app.py", line 139, in run res = method() 
File "/var/www/html/index.py", line 113, in ProcessRegistration conn.request("POST", "/gateway/transact.dll", mystring, headers) 
File "/usr/local/lib/python2.7/httplib.py", line 946, in request self._send_request(method, url, body, headers) 
File "/usr/local/lib/python2.7/httplib.py", line 987, in _send_request self.endheaders(body) 
File "/usr/local/lib/python2.7/httplib.py", line 940, in endheaders self._send_output(message_body) 
File "/usr/local/lib/python2.7/httplib.py", line 803, in _send_output self.send(msg) 
File "/usr/local/lib/python2.7/httplib.py", line 755, in send self.connect() 
File "/usr/local/lib/python2.7/httplib.py", line 1152, in connect self.timeout, self.source_address) 
File "/usr/local/lib/python2.7/socket.py", line 567, in create_connection raise error, msg 
gaierror: [Errno -2] Name or service not known 

मैं तो जैसे मेरे अनुरोध का निर्माण:

mystring = urllib.urlencode(cardHash) 
headers = {"Content-Type": "text/xml", "Content-Length": str(len(mystring))} 
conn = httplib.HTTPSConnection("secure.authorize.net:443", source_address=("myurl.com", 443)) 
conn.request("POST", "/gateway/transact.dll", mystring, headers) 

इस के लिए एक और परत जोड़ने के लिए, यह हमारे विकास सर्वर पर काम कर रहा था जो httplib 2.6 है और httplib.HTTPSConnection में source_address पैरामीटर के बिना।

किसी भी मदद की बहुत सराहना की जाती है।

============================================== =============

संपादित करें:

मैं कमांड लाइन से चला सकते हैं। जाहिर है यह कुछ प्रकार की अनुमति समस्या है। कोई विचार क्या उपयोगकर्ताओं को यह करने के लिए मुझे अनुमति देने की आवश्यकता होगी? संभवतः अपाचे बंदरगाह नहीं खोल सकता है?

+0

जीईटी अनुरोध, समान पथ, कोई शीर्षलेख के साथ क्या होता है? – TryPyPy

+0

एक पोस्ट पर एक ही चीज़। – Chris

+0

एचएम, स्क्रिप्ट यहां ठीक काम करती है, यहां तक ​​कि 'व्यापारी लॉगिन आईडी या पासवर्ड अमान्य है या खाता निष्क्रिय है।' अगर मैं प्रतिक्रिया प्रिंट करता हूं। नेटवर्क मुद्दों पर ध्यान केंद्रित करें; – TryPyPy

उत्तर

2

अंततः समस्या इस तथ्य पर आ गई कि सेलिंक्स उस बंदरगाह से अपाचे को रोक रहा था। सेल्लिनक्स को अक्षम करने से समस्याएं ठीक हुईं। मुझे बाद में कोई समस्या थी जहां मेरे पास /var/www/.python-eggs/ नहीं था, इसलिए MySQLdb आयात पर हो रहा था। लेकिन एक mkdir के बाद, यह तय किया गया था।

0

मेजबान से अलग बंदरगाह पारित:

conn = httplib.HTTPSConnection("secure.authorize.net", 443, ....) 
+0

जो लौटा "त्रुटि: [Errno13] अनुमति अस्वीकार कर दिया" मेरा स्रोत पता वास्तव में क्या होना चाहिए? क्या यह सिर्फ मुझे "www.mydomain.com" कर सकता है या यह "http://www.mydomain.com/mypy.py" होना चाहिए? क्या इससे कोई फर्क पड़ता है? – Chris

+0

अनुमति अस्वीकृत "वास्तव में मेरे स्रोत_ड्रेस को बदलने के कारण हुई थी। यूआरएल और बंदरगाह को अलग करने में कोई फर्क नहीं पड़ता। – Chris

+0

आपका क्या मतलब है? अब आपको 'गियर आतंक नहीं मिला: [Errno -2] नाम या सेवा अब और नहीं बल्कि एक और त्रुटि है? – nosklo

6

gaierror: [Errno -2] Name or service not known

यह त्रुटि अक्सर अपने DNS रिसोल्वर की विफलता को दर्शाता है। क्या ping secure.authorize.net उसी सर्वर से सफल उत्तरों लौटाता है जो gaierror प्राप्त करता है? क्या मेजबाननाम में एक टाइपो है?

+0

पिंग एक "पैकेट फ़िल्टर" संदेश देता है एनडी विफल रहता है।मुझे लगता है कि ऐसा इसलिए है क्योंकि यह सुरक्षित है और केवल पोर्ट 443 स्वीकार करेगा। इस बिंदु पर मुझे "अनुमति अस्वीकृत" संदेश मिल रहा है। मुझे यकीन नहीं है कि यह एक कदम आगे या पीछे है। – Chris

+0

क्रिस, मैं सुरक्षित.authorize.net सफलतापूर्वक पिंग करने में सक्षम हूं। 'Nslookup safe.authorize.net' आपको क्या बताता है? –

+0

सर्वर: \t \t 192.168.3.1 पता: \t 192.168.3.1 # 53 अनाधिकारिक जवाब: नाम: \t secure.authorize.net पता: 64.94.118.33 नाम: \t secure.authorize.net पता : 64.94.118.32 – Chris

12

एक (स्पष्ट) सिर के रूप में, यह त्रुटि भी होस्ट पैरामीटर में प्रोटोकॉल समेत ट्रिगर की जा सकती है। उदाहरण के लिए इस कोड:

conn = httplib.HTTPConnection("http://secure.authorize.net", 80, ....) 

भी कारण होगा "gaierror: [errno -2] नाम या सेवा ज्ञात नहीं है" त्रुटि है, भले ही अपने सभी नेटवर्किंग सेटअप सही है।