2017-12-29 16 views
0

Ich habe überall auf Stack Overflow gesucht, aber ich habe keine Antwort auf diese Frage gefunden.Python-Anfragen, wie man die URL dynamisch erhält?

Wie kann ein Python-Skript dynamisch eine URL empfangen, die auf einem JavaScript-Funktionsaufruf basiert?

Zum Beispiel in diesen Stack Overflow question (-Code reproduziert unten) wie könnte ich die URL dynamisch erhalten (die in diesem Fall fest einprogrammiert wird), wenn der Name der Datei Python abc.py war und ich rief xhttp = new XMLHttpRequest(); und dann
xhttp.open("GET", "abc.py?token=123", true); in einer HTML-Datei mit Javascript?

from urllib.parse import urlparse 
from urllib.parse import parse_qs 
from urllib.parse import urlencode 

url = 'http://example.com?param1=a&token=TOKEN_TO_REPLACE&param2=c' 

o = urlparse(url) 
query = parse_qs(o.query) 
if query.get('token'): 
    query['token'] = ['NEW_TOKEN', ] 
    new_query = urlencode(query, doseq=True) 
    url.split('?')[0] + '?' + new_query 

>>> http://example.com?param2=c&param1=a&token=NEW_TOKEN 

Antwort

1

Sie müssen Framework verwenden, dies zu tun, Python-Skript allein ohne Vernetzung/Buchse Funktionalität nicht mit der Front-End (js Seite) kommunizieren konnte, unten ein einfaches Backend zu erhalten Ihre Javascript Anfrage mit bottle.py

Hier ist eine einfache Implementierung, die eine POST-Anfrage vom Client erhält und die Logik, die Sie benötigen, aktualisiert, URL wird an den aufrufenden Code zurückgegeben. POST

Hinweis ist die Anforderung und die Daten json mit dem Token und URL

from bottle import post, run, request 
import json 

from urllib.parse import urlparse 
from urllib.parse import parse_qs 
from urllib.parse import urlencode 


def replace_token(data): 
    url = data['url'] 
    token = data['token'] 
    o = urlparse(url) 
    query = parse_qs(o.query) 
    if query.get('token'): 
     query['token'] = [token] 
     new_query = urlencode(query, doseq=True) 
     return url.split('?')[0] + '?' + new_query 



@post('/token') 
def index(): 
    data = json.load(request.body) 
    return replace_token(data) 

run(host='localhost', port=8080, debug=True) 

Dann Sie es mit einfachen Test können mit einem curl

curl -X POST http://localhost:8080/token -d '{"token":"NEW_TOKEN", "url":"http://example.com?param1=a&token=TOKEN_TO_REPLACE&param2=c"}' 
+0

Danke mir in den richtigen für den Hinweis Richtung. Ich benutzte das Flask-Framework, um eingehende URLs zu routen. Für andere, in der gleichen Zwangslage, wenn Sie die URL von einer Cross-Domain-URL aufrufen werden, müssen Sie auch domänenübergreifende Anrufe zulassen. Dieser Beitrag hat mir geholfen: https://stackoverflow.com/questions/7023052/configure-flask-dev-server-to-be-visible-across-the-network –

Verwandte Themen