Я пытаюсь создать обратный прокси-сервер, чтобы поговорить с определенными API-интерфейсами (например, Twitter, Github, Instagram), после чего я могу позвонить с моим обратным прокси-сервером на любой (клиентских) приложений, которые я хочу (подумайте об этом как API-менеджер).Python-Twisted: обратный прокси-сервер для HTTPS-API: не удалось подключиться
Кроме того, я использую LXC-контейнер для этого.
Например, вот простейший код, который я взломал из примеров на витых Docs:
from twisted.internet import reactor
from twisted.web import proxy, server
from twisted.python.log import startLogging
from sys import stdout
startLogging(stdout)
site = server.Site(proxy.ReverseProxyResource('https://api.github.com/users/defunkt', 443, b''))
reactor.listenTCP(8080, site)
reactor.run()
Когда я Curl в контейнере, я получаю правильный запрос (то есть я получить соответствующее JSON).
Вот как я использовал команду CURL:
curl https://api.github.com/users/defunkt
А вот выход я получаю:
{
"login": "defunkt",
"id": 2,
"avatar_url": "https://avatars.githubusercontent.com/u/2?v=3",
"gravatar_id": "",
"url": "https://api.github.com/users/defunkt",
"html_url": "https://github.com/defunkt",
"followers_url": "https://api.github.com/users/defunkt/followers",
"following_url": "https://api.github.com/users/defunkt/following{/other_user}",
"gists_url": "https://api.github.com/users/defunkt/gists{/gist_id}",
"starred_url": "https://api.github.com/users/defunkt/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/defunkt/subscriptions",
"organizations_url": "https://api.github.com/users/defunkt/orgs",
"repos_url": "https://api.github.com/users/defunkt/repos",
"events_url": "https://api.github.com/users/defunkt/events{/privacy}",
"received_events_url": "https://api.github.com/users/defunkt/received_events",
"type": "User",
"site_admin": true,
"name": "Chris Wanstrath",
"company": "GitHub",
"blog": "http://chriswanstrath.com/",
"location": "San Francisco",
"email": "[email protected]",
"hireable": true,
"bio": null,
"public_repos": 107,
"public_gists": 280,
"followers": 15153,
"following": 208,
"created_at": "2007-10-20T05:24:19Z",
"updated_at": "2016-02-26T22:34:27Z"
}
Однако при попытке извлечения прокси через Firefox с помощью:
Я получаю: «Не удалось подключиться»
Это то, что выглядит мой Twisted журнал как:
2016-02-27 [-] Log opened.
2016-02-27 [-] Site starting on 8080
2016-02-27 [-] Starting factory
2016-02-27 [-] Starting factory
2016-02-27 [-] "10.5.5.225" - - [27/Feb/2016: +0000] "GET/HTTP/1.1" 501 26 "-" "Mozilla/5.0 (X11; Debian; Linux x86_64; rv:44.0) Gecko/20100101 Firefox/44.0"
2016-02-27 [-] Stopping factory
Как я могу использовать Twisted сделать вызов API (большинство API-интерфейсы являются HTTPS в настоящее время в любом случае) и получить необходимый ответ (в основном, то, что «200» ответа/JSON должен быть)?
Я попытался, глядя на этот вопрос: Convert HTTP Proxy to HTTPS Proxy in Twisted
Но это не имеет особого смысла от кодирования точки зрения из-(или говоря ничего об обратном-проксирование).
** Edit: я также пытался переключение из вызова HTTPS API для обычного вызова HTTP с помощью:
curl http[colon][slash][slash]openlibrary[dot]org[slash]authors[slash]OL1A.json
(URL выше, был отформатирован, чтобы избежать проблем канального конфликта)
Однако, Я по-прежнему получаю ту же ошибку в своем браузере (как упоминалось выше).
** Edit2: Я попытался запустить свой код, но я получаю эту ошибку:
Если вы посмотрите на изображение, вы увидите сообщение об ошибке (при выполнении кода):
builtins.AttributeError: 'str' object has no attribute 'decode'
Когда я запускаю этот пример, 'curl' и Firefox говорят, что« не удалось подключиться », поэтому я не уверен, что вы делаете, чтобы получить правильный ответ JSON. Вы используете образец кода точно так же, как написано? – Glyph
Ничего себе, вы основатель Twisted, приятно познакомиться с вами, сэр! Я запускаю код с помощью: 'python3 file.py'. Что касается выхода, я редактирую свой вопрос, чтобы указать, как я использовал завиток и полученный результат. Возможно, что вы ограничены по скорости API-интерфейсом github (существует ограничение на публичные вызовы без ключа API), но мне удалось получить ответ JSON. – coolpy
Удовольствие от встречи с вами. Спасибо за использование Twisted :). Теперь, когда вы ясно дали понять, как вы управляете своей командой, я могу ответить на него ... – Glyph