Python-Requests,如何动态接收网址?

时间:2017-12-29 07:50:35

标签: javascript python python-requests

我已经查看了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&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

1 个答案:

答案 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&param2=c"}'