2011-01-12 21 views
6

Próbuję użyć httplib wysłać dane karty kredytowej do authorize.net. Kiedy próbuję pisać wniosek, pojawia się następujący traceback:pyton httplib Nazwa lub usługa nie jest znana

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 

buduję moją prośbę tak:

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) 

dodać kolejną warstwę na to, że działa na naszym serwerze rozwoju, który ma httplib 2.6 i bez parametru adres_źródłowy w httplib.HTTPSConnection.

Każda pomoc jest bardzo doceniana.

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

EDIT:

mogę go uruchomić z linii poleceń. Najwyraźniej jest to problem z uprawnieniami. Jakieś pomysły, jakie uprawnienia muszę przyznać użytkownikom, którzy mogą to zrobić? Być może Apache nie może otworzyć portu?

+0

Co dzieje się z żądaniem GET, tą samą ścieżką, bez nagłówków? – TryPyPy

+0

to samo, co w poście. – Chris

+0

Hm, skrypt działa dobrze tutaj, nawet przechodząc do 'Identyfikator logowania sprzedawcy lub hasło jest nieprawidłowe lub konto jest nieaktywne." Jeśli wydrukuję odpowiedź. Koncentracja na problemach sieciowych; – TryPyPy

Odpowiedz

2

Problem ostatecznie sprowadza się do faktu, że SELinux został zatrzymanie apache od uzyskiwanie tego portu. Wyłączenie selinux naprawiło problemy. Miałem problem później, gdy nie miałem /var/www/.python-eggs/, więc MySQLdb był w trakcie importu. Ale po mkdir zostało to naprawione.

0

przekazać portu oddzielnie od gospodarza:

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

, która zwróciła "błąd: [Errno13] Odmowa uprawnień" Jaki powinien być dokładnie mój adres źródłowy? czy może to być tylko moja "www.mydomena.com" lub powinna być "http://www.mydomain.com/mypy.py"? czy to ma znaczenie? – Chris

+0

Odmowa uprawnień "została spowodowana przez zmianę mojego adresu źródłowego, a odseparowanie adresu URL od portu nie miało żadnego znaczenia." – Chris

+0

co masz na myśli? Teraz nie otrzymujesz nazwy 'gaierror: [Errno -2] lub usługa nie known' już jednak inny błąd – nosklo

6

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

Ten błąd często sygnalizuje awarię swojej rozpoznawania nazw DNS. Czy ping secure.authorize.net zwraca skuteczne odpowiedzi z tego samego serwera, który odbiera gaierror? Czy nazwa hosta zawiera literówkę?

+0

ping zwraca komunikat "Odfiltrowany pakiet" a nd kończy się niepowodzeniem.Zakładam, że dzieje się tak dlatego, że jest zabezpieczony i akceptuje tylko port 443. w tym momencie otrzymuję komunikat "Odmowa uprawnień". Nie jestem pewien, czy to krok do przodu, czy do tyłu. – Chris

+0

Chris, jestem w stanie pomyślnie przetestować secure.authorize.net. Co mówi "nslookup secure.authorize.net"? –

+0

Serwer: \t \t 192.168.3.1 Adres: \t 192.168.3.1 # 53 niemiarodajne odpowiedź: Nazwa: \t secure.authorize.net Adres: 64.94.118.33 Nazwa: \t secure.authorize.net Adres : 64.94.118.32 – Chris

12

Jako (oczywiste) kieruje się ten sam błąd może być również wywołane przez włączenie protokołu w parametrze gospodarza. Na przykład ten kod:

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

będzie także powodować „gaierror: [ERRNO -2] Nazwa lub usługa nie znane” błąd, nawet jeśli wszystkie twoje ustawienia sieci są prawidłowe.

Powiązane problemy