我查遍了 Stack Overflow,但没有找到这个问题的答案。
Python 脚本如何根据 JavaScript 函数调用动态接收 URL?
例如,在这个Stack Overflow question 中(下面复制的代码)如果 python 文件的名称是 abc.py 并且我调用了,我如何动态接收 url(在本例中是硬编码的)
xhttp = new XMLHttpRequest();
然后
xhttp.open("GET", "abc.py?token=123", true);
在一些带有 javascript 的 html 文件中?
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
最佳答案
您需要使用框架来执行此操作,没有网络/套接字功能的 python 脚本无法与前端(js 端)通信,下面是一个简单的后端,用于使用 bottle.py 接收您的 javascript 请求
这是一个简单的实现,它接收来自客户端的 POST 请求并执行您需要的逻辑,更新的 url 返回到调用代码。
请注意,请求是 POST,数据是带有 token 和 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来测试它
curl -X POST http://localhost:8080/token -d '{"token":"NEW_TOKEN", "url":"http://example.com?param1=a&token=TOKEN_TO_REPLACE¶m2=c"}'
关于javascript - Python-Requests,如何动态接收url?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48019321/