我已经查看了Stack Overflow,但我还没有找到这个问题的答案。
python脚本如何根据javascript函数调用动态接收url?
例如,在这个Stack Overflow question (下面转载的代码)中,如果python文件的名称是abc.py并且我调用了,我怎么能动态地接收url(在这种情况下是硬编码的)
xhttp = new XMLHttpRequest();
然后是
在一些带有javascript的html文件中xhttp.open("GET", "abc.py?token=123", true);
?
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¶m2=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¶m1=a&token=NEW_TOKEN
答案 0 :(得分:1)
您需要使用框架来执行此操作,单独的python脚本没有网络/套接字功能无法与前端(js端)通信,下面是使用bottle.py接收您的javascript请求的简单后端
这是一个简单的实现,它接收来自客户端的POST请求并执行您需要的逻辑,更新的url将返回给调用代码。
请注意,请求是POST,数据是带有令牌和URL的json
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)
然后你可以通过简单的卷曲
来测试它curl -X POST http://localhost:8080/token -d '{"token":"NEW_TOKEN", "url":"http://example.com?param1=a&token=TOKEN_TO_REPLACE¶m2=c"}'