Взаимодействие с API-интерфейсом LinkPoint с помощью Python - отправка XML через SSL с аутентификацией
Я пытаюсь установить успешное соединение со шлюзом LinkPoint с помощью Python. Для тех из вас, кто не знаком с их API, вы получите .pem
файл, который вы используете для аутентификации.
У меня проблемы с использованием этого файла и созданием безопасного соединения по SSL.
В соответствии с их документацией API (которая оставляет желать лучшего, кстати), я считаю, что конфигурация должна выглядеть примерно так:
HOST = 'secure.linkpt.net'
API_URL = 'https://secure.linkpt.net/lpc/servlet/lppay'
PORT = 1129
cert_key = my_cert_key.pem
Используя эту информацию и действительный XML
Строка, как я могу создать это соединение?
Я довольно новичок в HTTP
соединения в Python. Я успешно реализовал соединения с другими API, используя POST
с urllib2
, Естественно, моя первая попытка началась с аналогичного подхода в надежде, что я найду решение.
Что-то вроде:
headers = { 'User-Agent' : 'Rico',
'Content-type' : 'text/xml; charset=\"UTF-8\"',
'Content-length' : len(self.xml_string),
}
# POST to First Data (Link Point)
req = urllib2.Request(API_URL, self.xml_string, headers)
response = urllib2.urlopen(req)
self.handleResponse(response.read())
Я мало надеялся, что это сработает, так как я ничего не рассказывал о cert_key
или PORT
,
После этой попытки я попытался использовать подход, аналогичный тому, который я нашел из решения другого поста stackru. К сожалению, я не смог далеко уйти с этим, так как у меня нет ca_certs
или же cert
файлы (которые я знаю).
Я пытался использовать запросы, но не могу найти документацию / примеры для меня, чтобы понять это.
Я также пытался использовать Twisted, и я очень надеялся, что смогу что-то с этим сделать, но это похоже на попытку открыть дверь с разбивающимся шаром. Мне это кажется излишним. Мне просто нужно простое соединение / запрос / ответ... это кажется слишком сложным для этого.
Моей следующей попыткой был PycURL, но я столкнулся с достаточным отчаянием во время этого процесса, и я решил приехать сюда, чтобы узнать, есть ли у кого-нибудь хорошие предложения, прежде чем углубляться в это.
Если вы думаете, что я должен повторно посетить один из этих инструментов, пожалуйста, дайте мне знать. Я не проводил много времени с любым из них - просто достаточно, чтобы мои ноги промокли. Если бы вы могли также указать мне хороший пример или подробную документацию, это было бы здорово.
Кроме того, я бы предпочел не использовать стандарт SSL
библиотека для создания соединения самостоятельно - я не хочу изобретать велосипед, если мне не нужно.
1 ответ
Решение, которое я смог использовать для получения действительного соединения, использовало httplib
следующее:
import httplib
HOST = 'staging.linkpt.net'
API_URL = '/lpc/servlet/lppay'
PORT = 1129
CERTFILE = 'my_cert_file.pem'
headers = { 'User-Agent' : 'Rico',
'Content-type' : 'text/xml; charset=\"UTF-8\"',
'Content-length' : len(xml_str),
}
conn = httplib.HTTPSConnection(HOST, PORT, cert_file = CERTFILE)
conn.putrequest("POST", API_URL)
conn.putheader(headers)
conn.endheaders()
conn.send(xml_str)
response = conn.getresponse()
Я еще не смог сгенерировать действительный запрос. Видимо я неправильно интерпретировал документацию по API и продолжаю получать Malformed or unrecognized request.
но по крайней мере я делаю связь.
Я обновлю этот ответ, если смогу найти более полезную информацию по этому вопросу.
ОБНОВЛЕНИЕ: сотрудник службы поддержки Link Point сказал мне, что я использую старую документацию по API. С тех пор я попробовал с более новой версией и все еще не могу соединиться. Я даже не могу получить ответ от их сервера. Это больше не является возможным решением этой проблемы.
ОБНОВЛЕНИЕ 2: я смог решить эту проблему в другом посте SSL-соединение с использованием сертификата.pem с Python
Наслаждайтесь!