最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python實(shí)現(xiàn)跨域代理服務(wù)器的方法

 更新時(shí)間:2023年07月17日 15:28:50   作者:銘  
這篇文章主要介紹了python實(shí)現(xiàn)跨域代理服務(wù)器的方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
  • 準(zhǔn)備環(huán)境
  • python3.7+
  • 依賴:aiohttp
  • 代碼實(shí)現(xiàn)(代理服務(wù)器,返回響應(yīng)體和進(jìn)行跨域處理后的headers)
import aiohttp
from functools import wraps
from aiohttp import web
corscode = {
                'Access-Control-Allow-Origin': '*',
                'Access-Control-Allow-Methods': 'GET, POST, OPTIONS', # 需要限制請(qǐng)求就在這里增刪
                'Access-Control-Allow-Headers': '*',
                'Server':'is my server',
            }
# 實(shí)例化路由
routes = web.RouteTableDef()
# 異步j(luò)son序列化
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 請(qǐng)求,直接返回空數(shù)據(jù)和允許跨域的 header
        if request.method == 'OPTIONS':
            return web.Response(headers=corscode)
        # 繼續(xù)處理其他請(qǐng)求
        response = await handler(request)
        # 為每次響應(yīng)添加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":"參數(shù)錯(cuò)誤"})
    async with aiohttp.ClientSession() as session:
        async with session.get(url) as response:
            # 檢查請(qǐng)求是否成功,如果不成功,可以根據(jù)需要進(jìn)行處理
            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)
  • 測(cè)試

1.寫(xiě)個(gè)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.下載測(cè)試

downloadfile(url, fileName)

3.結(jié)果

可以正常下載
并且在響應(yīng)頭中能看到Server:is my server
同時(shí)可以看到添加成功的Allow-Origin響應(yīng)頭

到此這篇關(guān)于python實(shí)現(xiàn)跨域代理服務(wù)器的文章就介紹到這了,更多相關(guān)python跨域代理服務(wù)器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

达尔| 稻城县| 石棉县| 和田市| 阳泉市| 镇赉县| 遂川县| 永修县| 玉环县| 陈巴尔虎旗| 上犹县| 夏津县| 万全县| 富源县| 江油市| 泌阳县| 班戈县| 如皋市| 综艺| 桃园市| 蒙自县| 平舆县| 沛县| 策勒县| 金寨县| 天峨县| 德安县| 墨竹工卡县| 宜宾县| 济南市| 六盘水市| 正阳县| 南岸区| 灌云县| 汉川市| 贵阳市| 庆元县| 莱西市| 丰都县| 双牌县| 尉犁县|