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装饰器初探(推荐)

    python装饰器初探(推荐)

    下面小编就为大家带来一篇python装饰器初探(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-07-07
  • Pandas实现批量拆分与合并Excel的示例代码

    Pandas实现批量拆分与合并Excel的示例代码

    这篇文章主要为大家详细讲讲如何利用python Pandas实现批量拆分与合并Excel,文中有非常详细的的代码示例,对正在学习python的小伙伴们很有帮助,需要的朋友可以参考下
    2022-05-05
  • 如何使用Python中的正则表达式处理html文件

    如何使用Python中的正则表达式处理html文件

    html类型的文本数据内容是由前端代码书写的标签+文本数据的格式,可以直接在chrome浏览器打开,清楚的展示出文本的格式,下面这篇文章主要给大家介绍了关于如何使用Python中的正则表达式处理html文件的相关资料,需要的朋友可以参考下
    2023-04-04
  • Python如何将两个Excel文件按相同字段合并到一起

    Python如何将两个Excel文件按相同字段合并到一起

    文章介绍了如何使用Pandas工具将两个关联的Excel文件合并成一个,首先创建两个Excel文件test1和test2,然后使用Pandas进行合并,最后显示新创建的Excel文件
    2025-02-02
  • pandas根据指定条件筛选数据的实现示例

    pandas根据指定条件筛选数据的实现示例

    条件筛选是pandas中非常重要的一个功能,它允许我们根据特定条件来快速、高效地筛选数据,本文主要介绍了pandas根据指定条件筛选数据的实现示例,具有一定的参考价值,感兴趣的可以了解一下
    2024-03-03
  • python爬虫入门教程--利用requests构建知乎API(三)

    python爬虫入门教程--利用requests构建知乎API(三)

    这篇文章主要给大家介绍了关于python爬虫入门之利用requests构建知乎API的相关资料,文中通过示例代码介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
    2017-05-05
  • Django项目创建及管理实现流程详解

    Django项目创建及管理实现流程详解

    这篇文章主要介绍了Django项目创建及管理实现流程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-10-10
  • Django实现内容缓存实例方法

    Django实现内容缓存实例方法

    在本篇文章里小编给大家整理了关于Django实现内容缓存实例方法,有需要的朋友们可以跟着学习下。
    2020-06-06
  • Python中True(真)和False(假)判断详解

    Python中True(真)和False(假)判断详解

    众所周知True和False是一个布尔变量可取的值,下面这篇文章主要给大家介绍了关于Python中True(真)和False(假)判断的相关资料,本文通过示例代码介绍的非常详细,需要的朋友可以参考下
    2022-07-07
  • 使用Python实现检测并删除离群值

    使用Python实现检测并删除离群值

    离群值是一个数据项/对象,它明显偏离其余的(所谓的正常)对象,本文主要为大家详细介绍了如何使用Python实现检测并删除离群值,感兴趣的小伙伴可以了解下
    2024-01-01

最新评论