Python-Requests,如何动态接收url?

问题描述 投票:0回答:1

我已经查看了Stack Overflow,但我还没有找到这个问题的答案。

python脚本如何根据javascript函数调用动态接收url?

例如,在这个Stack Overflow question (下面转载的代码)如果python文件的名称是abc.py并且我调用了xhttp = new XMLHttpRequest();然后我怎么能动态地接收url(在这种情况下是硬编码的) 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&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
javascript python python-requests
1个回答
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&param2=c"}'
© www.soinside.com 2019 - 2024. All rights reserved.