Python httplib Имя или служба неизвестна - PullRequest
7 голосов
/ 12 января 2011

Я пытаюсь использовать httplib для отправки информации о кредитной карте на authorize.net. Когда я пытаюсь опубликовать запрос, я получаю следующую трассировку:

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 и без параметра source_address в httplib.HTTPSConnection.

Любая помощь очень ценится.

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

EDIT:

Я могу запустить его из командной строки. Видимо, это какая-то проблема с разрешениями. Любые идеи, какие разрешения мне нужно предоставить, для каких пользователей, чтобы это произошло? Возможно, Apache не может открыть порт?

Ответы [ 4 ]

14 голосов
/ 06 октября 2011

Поскольку (очевидный) заголовок, эта же ошибка также может быть вызвана включением протокола в параметр хоста.Например, этот код:

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

также вызовет ошибку «gaierror: [Errno -2] Имя или служба не известна», даже если все настройки вашей сети верны.

7 голосов
/ 12 января 2011

gaierror: [Errno -2] Имя или служба не известны

Эта ошибка часто указывает на сбой вашего преобразователя DNS. ping secure.authorize.net возвращает успешные ответы с того же сервера, который получил gaierror? Есть ли в имени хоста опечатка?

2 голосов
/ 13 января 2011

Проблема в конечном итоге сводилась к тому, что selinux мешал Apache получить этот порт.Отключение selinux решило проблемы.У меня была проблема позже, когда у меня не было /var/www/.python-eggs/, поэтому MySQLdb терял импортНо после mkdir это было исправлено.

0 голосов
/ 12 января 2011

передать порт отдельно от хоста:

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