MITMProxy: Smart URL-Ersatz

Wir verwenden einen benutzerdefinierten Scraper, für den eine separate Website für eine Sprache erforderlich ist (dies ist eine Architekturbeschränkung). Wie site1.co.uk, site1.es, site1.de etc.

Wir müssen jedoch eine Website mit vielen Sprachen analysieren, die durch URLs wie site2.com/en, site2.com/de, site2.com/es usw. getrennt sind.

Ich habe über MITMProxy nachgedacht: Ich könnte alle Anfragen auf diese Weise umleiten:

en.site2.com/* --> site2.com/en
de.site2.com/* --> site2.com/de
...

Ich habe ein kleines Skript geschrieben, das einfach URLs aufnimmt und sie neu schreibt:

class MyMaster(flow.FlowMaster):

  def handle_request(self, r):
    url = r.get_url()

    # replace URLs
    if 'blabla' in url:
      r.set_url(url.replace('something', 'another'))

Der Zielhost generiert jedoch eine 301-Weiterleitung mit der Antwort vom Webserver - "Die Seite wurde hierher verschoben" und dem Link zu site2.com/de

Es hat funktioniert, als ich mit dem Umschreiben von URLs gespielt habe, d. H. Site2.com/de -> site2.com/de. Aber für verschiedene Hosts (Subdomain und Root-Domain, um genau zu sein) funktioniert es nicht.

Ich habe versucht, den Host-Header in der handle_request-Methode von oben zu ersetzen:

for key in r.headers.keys():
        if key.lower() == 'host':
            r.headers[key] = ['site2.com']

Ich habe auch versucht, den Referrer zu ersetzen - all das hat nicht geholfen.

Wie kann ich diese Anfrage von der Subdomain an die Hauptdomain fälschen? Wenn eine HTTP-Client-Warnung generiert wird, ist dies in Ordnung, da dies für den Scraper (und die Warnungen, die dort angezeigt werden, deaktiviert werden können) und nicht für den tatsächlichen Browser erforderlich ist.

Vielen Dank!

Antworten auf die Frage(1)

Ihre Antwort auf die Frage