python实现跨域代理服务器

这篇具有很好参考价值的文章主要介绍了python实现跨域代理服务器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  • 准备环境
  1. python3.7+
  2. 依赖: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();
}
  1. 下载测试
downloadfile(url, fileName)
  1. 结果
    python实现跨域代理服务器
    可以正常下载
    并且在响应头中能看到Server:is my server
    同时可以看到添加成功的Allow-Origin响应头
    python实现跨域代理服务器

文章来源地址https://www.toymoban.com/news/detail-573159.html

到了这里,关于python实现跨域代理服务器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python开发技能实战-通过配置的代理服务器在具有外网连接的环境中在Pycharm中运行python代码

    打开科学上网工具,使得能够在浏览器科学上网,通过科学上网工具的配置文件,可以看出本地和远程代理的映射关系,此时,远程地址=本地地址,远程端口=本地端口。 1、在程序中配置请求网页代理请求。不需要在Windows上配置代理服务器。这种一般用于爬虫request请求。

    2024年02月06日
    浏览(61)
  • 分布式 - 服务器Nginx:一小时入门系列之Nginx环境准备

    1. Nginx 环境准备 虚拟机镜像,基于Centos7,网盘链接: https://pan.baidu.com/s/1NmCR-vdAcZLouRRn9V1yTA 密码: 1b60,虚拟机的用户名/密码:root/123456,使用的环境和应用放置在/home目录下: 目录 简介 说明 AdminLTE-3.2.0 静态web后台管理系统 静态web的配置演示 apps/ruoyi-admin.jar 若依后台管理系统

    2024年02月14日
    浏览(43)
  • 本地开发环境请求服务器接口跨域的问题(vue的问题)

    上面的这个报错大家都不会陌生,报错是说没有访问权限(跨域问题)。本地开发项目请求服务器接口的时候,因为客户端的同源策略,导致了跨域的问题。下面先演示一个没有配置允许本地跨域的的情况: 可以看到,此时我们点击获取数据,浏览器提示我们跨域了。所以我

    2024年01月23日
    浏览(50)
  • 使用Python搭建代理服务器- 爬虫代理服务器详细指南

    搭建一个Python爬虫代理服务器可以让你更方便地管理和使用代理IP。下面是一个详细的教程来帮助你搭建一个简单的Python爬虫代理服务器: 1. 首先,确保你已经安装了Python。你可以在官方网站(https://www.python.org/)下载并安装最新版本的Python。 2. 安装所需的Python库。打开终端或

    2024年02月15日
    浏览(40)
  • 内网环境pip使用代理服务器安装依赖库

    目录 使用proxy参数配置pip代理 使用配置文件配置pip代理 其他 由于公司内部网络无法访问外网导致安装依赖库失败,现将安装方法如下记录。 如不使用离线安装方法,可利用pip的--proxy参数进行代理的配置,使用方法如下: 应用示例如下: 本节参考博文【基础】pip 的超全使

    2024年01月23日
    浏览(45)
  • 远程服务器设置代理共享本地网络-解决内网环境无法git、pip等

    部分服务器不连外网,导致无法使用git、无法装包等问题,离线安装过于繁琐,本文使用clash共享本地win电脑网络给远程服务器,仅用于服务器(linux内网)和本地电脑(win可连接外网),且本地与服务器处于同一局域网下(如校园网) 步骤如下: 本地电脑Clash,开启Allow LAN功能, 端口

    2023年04月18日
    浏览(40)
  • Jenkins实现自作自定义镜像并推送Harbor并编写目标服务器准备脚本

    部署项目需要通过Publish Over SSH插件,让目标服务器执行命令。为了方便一次性实现拉取镜像和启动的命令,推荐采用脚本文件的方式。 添加脚本文件到目标服务器,再通过Publish Over SSH插件让目标服务器执行脚本即可。 deploy.sh

    2024年01月18日
    浏览(77)
  • HTTP代理服务器的设计与实现

    一、前言 这个实验挺麻烦的,本来就只有一周时间,等我开始着手准备的时候,也就剩两三天了,也没什么心情自己重头开打代码,于是就找了大佬的代码借鉴了一下,在验收之前处理完了所有的bug。不过,我觉得这个实验还是最好自己慢慢想,想到问题再去搜索,能收获到

    2023年04月13日
    浏览(47)
  • JAVA写HTTP代理服务器-socket实现

    HTTP代理服务器是一个中间服务器,它负责接收客户端的HTTP请求,然后将请求转发给目标服务器,并将目标服务器返回的响应返回给客户端。代理服务器可以处理各种HTTP请求,如GET、POST、PUT、DELETE等,并可以处理HTTPS请求。在开发Web应用程序时,使用代理服务器可以隐藏后端

    2024年02月03日
    浏览(32)
  • HTTP 代理服务器的设计与实现(C++)

    设计并实现一个基本 HTTP 代理服务器。要求在指定端口(例如 8080)接收来自客户的 HTTP 请求并且根据其中的 URL 地址访问该地址 所指向的 HTTP 服务器(原服务器),接收 HTTP 服 务器的响应报文,并 将响应报文转发给对应的客户进行浏览。 设计并实现一个支持 Cache 功能的

    2024年02月03日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包