Python-Twisted: proxy reverso para API HTTPS: não foi possível conectar
Estou tentando criar um proxy reverso para conversar com certas APIs (como Twitter, Github, Instagram) que eu posso chamar com meu proxy reverso para qualquer aplicativo (cliente) que eu desejar (pense nisso como um gerente de API) .
Além disso, estou usando um contêiner LXC para fazer isso.
Por exemplo, aqui está o código mais simples que eu cortei nos exemplos no Twisted 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()
Quando faço CURL dentro do contêiner, recebo uma solicitação válida (o que significa que recebo a resposta JSON apropriada).
Aqui está como eu usei o comando CURL:
curl https://api.github.com/users/defunkt
E aqui está a saída que recebo:
{
"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"
}
No entanto, quando tento buscar o proxy via Firefox usando:
Eu recebo: "Não foi possível conectar"
É assim que meu log do Twisted se parece:
27-02-2016 [-] Log aberto.
27-02-2016 [-] Site com início em 8080
2016-02-27 [-] Começando a fábrica
2016-02-27 [-] Começando a fábrica
27-02-2016 [-] "10.5.5.225" - - [27 / fev / 2016: +0000] "GET / HTTP / 1.1" 501 26 "-" "Mozilla / 5.0 (X11; Debian; Linux x86_64; rv : 44,0) Gecko / 20100101 Firefox / 44.0 "
27-02-2016 [-] Parando a fábrica
Como posso usar o Twisted para fazer uma chamada de API (a maioria das APIs é hoje HTTPS de qualquer maneira) e obter a resposta necessária (basicamente, qual deve ser a resposta "200" / JSON)?
Eu tentei olhar para esta pergunta:Conversão HTTP Proxy para HTTPS Proxy em Twisted
Mas não fazia muito sentido do ponto de vista da codificação (nem mencionava nada sobre proxy reverso).
** Editar: também tentei alternar a chamada da API HTTPS para uma chamada HTTP normal usando:
enrolar http [dois pontos] [barra] [barra] openlibrary [ponto] org [barra] autores [barra] OL1A.json
(O URL acima foi formatado para evitar problemas de conflito de link)
No entanto, ainda recebo o mesmo erro no meu navegador (como mencionado acima).
** Edit2: Tentei executar o seu código, mas recebo este erro:
Se você olhar para a imagem, verá o erro (ao executar o código) de:
builtins.AttributeError: o objeto 'str' não possui atributo 'decode'