python实现跨域代理服务器的方法

 更新时间:2023年07月17日 15:28:50   作者:铭  
这篇文章主要介绍了python实现跨域代理服务器的方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
  • 准备环境
  • python3.7+
  • 依赖:aiohttp
  • 代码实现(代理服务器,返回响应体和进行跨域处理后的headers)
import aiohttp
from functools import wraps
from aiohttp import web
corscode = {
                'Access-Control-Allow-Origin': '*',
                'Access-Control-Allow-Methods': 'GET, POST, OPTIONS', # 需要限制请求就在这里增删
                'Access-Control-Allow-Headers': '*',
                'Server':'is my server',
            }
# 实例化路由
routes = web.RouteTableDef()
# 异步json序列化
def jsondump(func):
    @wraps(func)
    async def wrapper(*args,**kwargs):
        result = await func(*args,**kwargs)
        try:
            return json.dumps(result ,ensure_ascii=False)
        except:
            return result
    return wrapper
# 封装一下web.json_resp
# def wj(dt):
#    return web.json_response(dt)
wj = lambda dt: web.json_response(dt)
# 处理OPTIONS和跨域的中间件
@jsondump
async def options_middleware(app, handler):
    async def middleware(request):
        # 处理 OPTIONS 请求,直接返回空数据和允许跨域的 header
        if request.method == 'OPTIONS':
            return web.Response(headers=corscode)
        # 继续处理其他请求
        response = await handler(request)
        # 为每次响应添加header
        try:
            response.headers.update(corscode)
        except Exception as e:
            return response
        return response
    return middleware
@jsondump
@routes.view(r'/get')
async def geturl(request): 
    url = request.query.get('url')
    if not url:
        return wj({"data":"参数错误"})
    async with aiohttp.ClientSession() as session:
        async with session.get(url) as response:
            # 检查请求是否成功,如果不成功,可以根据需要进行处理
            if response.status == 200:
                file = await response.read()
                return web.Response(body=file, headers=response.headers)
if __name__ == '__main__':
    app = web.Application()
    app.add_routes(routes)
    app.middlewares.append(options_middleware)
    web.run_app(app)
  • 测试

1.写个get的方法

function downloadfile(url, fileName) {
  var xhr = new XMLHttpRequest();
  xhr.open('GET', url, true);
  xhr.responseType = 'blob';
  xhr.onload = function() {
    if (xhr.status === 200) {
      var blob = xhr.response;
      var a = document.createElement('a');
      var url = window.URL.createObjectURL(blob);
      a.href = url;
      a.download = fileName;
      document.body.appendChild(a);
      a.click();
      document.body.removeChild(a);
      window.URL.revokeObjectURL(url);
    }
  };
  xhr.send();
}

2.下载测试

downloadfile(url, fileName)

3.结果

可以正常下载
并且在响应头中能看到Server:is my server
同时可以看到添加成功的Allow-Origin响应头

到此这篇关于python实现跨域代理服务器的文章就介绍到这了,更多相关python跨域代理服务器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python中文分词库jieba(结巴分词)详细使用介绍

    Python中文分词库jieba(结巴分词)详细使用介绍

    这篇文章主要介绍了Python中文分词库jieba(结巴分词)提取词,加载词,修改词频,定义词库详细使用介绍,需要的朋友可以参考下
    2022-04-04
  • python中利用matplotlib读取灰度图的例子

    python中利用matplotlib读取灰度图的例子

    今天小编就为大家分享一篇python中利用matplotlib读取灰度图的例子,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • python中的queue队列类型及函数用法

    python中的queue队列类型及函数用法

    这篇文章主要介绍了python中的queue队列类型及函数用法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-09-09
  • Python基础教程之装饰器详解

    Python基础教程之装饰器详解

    众所周知,Python装饰器是一种常见的元编程特性,在本教程中,我们将深入探讨Python装饰器的基本概念、语法及其应用,并利用实际例子加深理解,感兴趣的小伙伴快跟随小编一起了解一下吧
    2023-06-06
  • 用Python代码自动生成文献的IEEE引用格式的实现

    用Python代码自动生成文献的IEEE引用格式的实现

    这篇文章主要介绍了用Python代码自动生成文献的IEEE引用格式的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • Python学习之MRO方法搜索顺序

    Python学习之MRO方法搜索顺序

    这篇文章主要介绍了Python MRO方法搜索顺序,文中代码和图片解释的非常详细,可以很好的带大家学习相关知识内容,感兴趣的小伙伴可以参考一下这篇文章
    2021-09-09
  • 使用python对泰坦尼克号幸存者进行数据分析与预测

    使用python对泰坦尼克号幸存者进行数据分析与预测

    这篇文章主要介绍了使用python对泰坦尼克号幸存者进行数据分析与预测,应用机器学习的工具来预测哪些乘客在悲剧中幸存下来
    2023-03-03
  • Python进阶之多线程的实现方法总结

    Python进阶之多线程的实现方法总结

    在python中主要有两种实现多线程的方式:通过threading.Thread () 方法创建线程和通过继承 threading.Thread 类的继承重写run方法,接下来我们分别说一下多线程的两种实现形式吧
    2023-04-04
  • 用Python进行行为驱动开发的入门教程

    用Python进行行为驱动开发的入门教程

    这篇文章主要介绍了用Python进行行为驱动开发的入门教程,本文也对BDD的概念做了详细的解释,需要的朋友可以参考下
    2015-04-04
  • python实现AES和RSA加解密的方法

    python实现AES和RSA加解密的方法

    这篇文章主要为大家详细介绍了python实现AES和RSA加解密的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-03-03

最新评论