2011-01-12 22 views
6

Estoy tratando de usar httplib para enviar información de la tarjeta de crédito a authorize.net. Cuando trato de enviar la solicitud, me sale el siguiente rastreo:python httplib Nombre o servicio desconocido

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 

construyo mi solicitud de este modo:

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) 

para añadir otra capa a esto, que estaba trabajando en nuestro servidor de desarrollo que tiene httplib 2.6 y sin el parámetro source_address en httplib.HTTPSConnection.

Cualquier ayuda es muy apreciada.

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

EDIT:

que puede ejecutar desde la línea de comandos. Aparentemente este es un tipo de problema de permisos. ¿Alguna idea de qué permisos necesitaría otorgar a los usuarios para que esto ocurra? Posiblemente Apache no puede abrir el puerto?

+0

¿Qué sucede con una solicitud GET, la misma ruta, sin encabezados? – TryPyPy

+0

lo mismo que en una publicación. – Chris

+0

Hm, la secuencia de comandos funciona bien aquí, incluso llegando a 'El ID de inicio de sesión del comerciante o la contraseña no son válidos o la cuenta está inactiva. Si imprimo la respuesta. Enfoque en problemas de red; – TryPyPy

Respuesta

2

El problema en última instancia se debió al hecho de que selinux estaba impidiendo que apache obtuviera ese puerto. Deshabilitar Selinux solucionó los problemas. Tuve un problema más adelante en el que no tenía /var/www/.python-eggs/, por lo que MySQLdb estaba realizando mangueras en la importación. Pero después de un mkdir, fue arreglado.

0

pasar el puerto separado desde el host:

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

que devolvió "error: [Errno13] Permiso denegado" ¿Cuál debería ser exactamente mi dirección de origen? ¿puedo decir "www.mydomain.com" o debería ser "http://www.mydomain.com/mypy.py"? ¿Importa? – Chris

+0

el permiso denegado "fue en realidad causado por mí cambiar mi source_address. Separar la url y el puerto no parece hacer ninguna diferencia. – Chris

+0

¿qué quieres decir? Ahora no obtienes el' gaierror: [Errno -2] Nombre o servicio no conocido' pero otro error? – nosklo

6

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

Este error suele indicar un fallo de la resolución de DNS. ¿Devuelve ping secure.authorize.net respuestas satisfactorias del mismo servidor que recibe el gaierror? ¿El nombre de host tiene un error tipográfico?

+0

ping devuelve un mensaje "Paquete filtrado" a nd falla.Asumiría que esto se debe a que está protegido y solo aceptará el puerto 443. en este punto recibo un mensaje de "Permiso denegado". No estoy seguro de si eso es un paso adelante o hacia atrás. – Chris

+0

Chris, puedo hacer ping a secure.authorize.net correctamente. ¿Qué le dice 'nslookup secure.authorize.net'? –

+0

Servidor: \t \t 192.168.3.1 Dirección: \t 192.168.3.1 # 53 Respuesta no autorizada: Nombre: \t secure.authorize.net Dirección: 64.94.118.33 Nombre: \t secure.authorize.net Dirección : 64.94.118.32 – Chris

12

Como un aviso (obvio), este mismo error también se puede desencadenar al incluir el protocolo en el parámetro de host. Por ejemplo, este código:

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

también hará que el "gaierror: [Errno -2] Nombre o servicio no disponible" error, incluso si toda la configuración de red es correcta.

Cuestiones relacionadas