【问题标题】:Python-Requests, how to dynamically receive the url?Python-Requests,如何动态接收url?
【发布时间】:2018-06-09 16:49:05
【问题描述】:

我查看了整个 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&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】:

    您需要使用框架来执行此操作,没有网络/套接字功能的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 来测试它

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

    【讨论】:

    • 感谢您为我指明了正确的方向。我最终使用 Flask 框架来路由传入的 url。对于其他人,在同样的困境中,如果您要从跨域 url 调用 url,您也需要允许跨域调用。这篇文章帮助了我:stackoverflow.com/questions/7023052/…
    猜你喜欢
    • 2016-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-18
    • 2021-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多