Взаимодействие с 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

Наслаждайтесь!

Другие вопросы по тегам