Proxying na jinou webovou službou s Baňka

hlasů
20

Chci se žádostí o proxy, z mého baňky aplikace na jinou webovou službou běží lokálně na stroji. Raději použijte Láhev na to, než naše Nginx například vyšší úroveň, takže můžeme znovu použít náš stávající autentizační systém zabudovaný do naší aplikace. Čím více můžeme udržet tento „single sign on“, tím lépe.

Je tam existující modul nebo jiný kód, jak to udělat? Při pokusu o překonání aplikaci baňky na něco jako httplib nebo urllib se ukázala být bolest.

Položena 11/07/2011 v 21:48
zdroj uživatelem
V jiných jazycích...                            


3 odpovědí

hlasů
8

Mám implementaci proxy pomocí httplib v aplikaci Werkzeug systémem (jako ve vašem případě, potřeboval jsem použít autentizaci a autorizaci v webapp se).

Ačkoli baňky dokument neuvádí, jak získat přístup k HTTP hlavičky, můžete použít request.headers(viz Werkzeug dokumentace ). Pokud není nutné měnit odezvu a hlavičky používané serverem proxy aplikace jsou předvídatelné, proxy je staightforward.

Všimněte si, že pokud není nutné měnit odpověď, měli byste použít werkzeug.wsgi.wrap_filek zabalit httplib je proud odpovědí. Která umožňuje předávání otevřeného OS-level deskriptor souboru na HTTP server pro dosažení optimálního výkonu.

Odpovězeno 12/07/2011 v 16:17
zdroj uživatelem

hlasů
7

Můj původní plán byl pro veřejnost orientovaný URL být něco jako http://www.example.com/admin/myappproxy pro http://myapp.internal.example.com/. Dolů, že cesta vede šílenství.

Většina webapps, zejména ty s vlastním hostitelem, předpokládají, že se chystáte být spuštěn v kořenovém adresáři serveru HTTP a dělat věci, jako referenční jiných souborů absolutní cesta. Chcete-li tento problém vyřešit, budete muset přepsat URL všude možně: Umístění záhlaví a HTML, JavaScript a CSS souborů.

Udělal jsem napsat baňky proxy, plán , který to udělal, a když to fungovalo docela dobře pro jednu webapp jsem opravdu chtěl proxy, to není udržitelný. Byl to velký nepořádek regulárních výrazů.

V závěru jsem nastavil nový virtuální počítač v Nginx a používá svůj vlastní server proxy. Vzhledem k tomu, jak byly u kořene hostitele, přepisování URL byl většinou zbytečné. (A to málo, co bylo třeba, proxy server modul Nginx je manipulováno.) Tento webapp je zastupována na dělá svou vlastní autentizaci, která je dost dobré pro tuto chvíli.

Odpovězeno 20/09/2011 v 19:04
zdroj uživatelem

hlasů
22

Strávil jsem hodně času v práci na této stejné věci a nakonec našel řešení pomocí žádosti knihovnu, která se zdá, že funguje dobře. To dokonce ovládá nastavení více souborů cookie v jedné reakci, která se trochu vyšetřování, které má zjistit. Zde je funkce baňka názor:

from flask import request, Response
import requests

def _proxy(*args, **kwargs):
    resp = requests.request(
        method=request.method,
        url=request.url.replace('old-domain.com', 'new-domain.com'),
        headers={key: value for (key, value) in request.headers if key != 'Host'},
        data=request.get_data(),
        cookies=request.cookies,
        allow_redirects=False)

    excluded_headers = ['content-encoding', 'content-length', 'transfer-encoding', 'connection']
    headers = [(name, value) for (name, value) in resp.raw.headers.items()
               if name.lower() not in excluded_headers]

    response = Response(resp.content, resp.status_code, headers)
    return response
Odpovězeno 13/04/2016 v 14:25
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more