9

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 があり、httplib.HTTPSConnection に source_address パラメータがない開発サーバーで作業していました。

どんな助けでも大歓迎です。

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

編集:

コマンドラインから実行できます。どうやらこれはある種の権限の問題です。これを実現するために、どのユーザーにどの権限を付与する必要があるかについてのアイデアはありますか? おそらくApacheはポートを開くことができませんか?

4

4 に答える 4

19

(明らかな)注意として、この同じエラーは、ホストパラメーターにプロトコルを含めることによってもトリガーされる可能性があります。たとえば、このコード:

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

また、すべてのネットワーク設定が正しい場合でも、「gaierror: [Errno -2] 名前またはサービスが不明です」というエラーが発生します。

于 2011-10-05T22:35:53.227 に答える
7

gaierror: [Errno -2] 名前またはサービスが不明です

このエラーは、多くの場合、DNS リゾルバーの障害を示しています。gaierrorping secure.authorize.netを受信したのと同じサーバーから正常な応答が返されますか? ホスト名にタイプミスはありませんか?

于 2011-01-12T20:20:55.923 に答える
2

問題は最終的に、selinux が apache がそのポートを取得するのを妨げていたという事実に帰着しました。selinux を無効にすると問題が解決しました。後で /var/www/.python-eggs/ がないという問題が発生したため、MySQLdb はインポート時にホストしていました。しかし、mkdir の後、修正されました。

于 2011-01-13T15:10:18.417 に答える
0

ホストとは別にポートを渡します。

conn = httplib.HTTPSConnection("secure.authorize.net", 443, ....)  
于 2011-01-12T19:44:14.853 に答える