python實現(xiàn)跨域代理服務(wù)器的方法
- 準(zhǔn)備環(huán)境
- python3.7+
- 依賴:aiohttp
- 代碼實現(xiàn)(代理服務(wù)器,返回響應(yīng)體和進行跨域處理后的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() # 異步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 請求,直接返回空數(shù)據(jù)和允許跨域的 header if request.method == 'OPTIONS': return web.Response(headers=corscode) # 繼續(xù)處理其他請求 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ù)錯誤"}) async with aiohttp.ClientSession() as session: async with session.get(url) as response: # 檢查請求是否成功,如果不成功,可以根據(jù)需要進行處理 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.結(jié)果
可以正常下載
并且在響應(yīng)頭中能看到Server:is my server
同時可以看到添加成功的Allow-Origin響應(yīng)頭
到此這篇關(guān)于python實現(xiàn)跨域代理服務(wù)器的文章就介紹到這了,更多相關(guān)python跨域代理服務(wù)器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Pandas實現(xiàn)批量拆分與合并Excel的示例代碼
這篇文章主要為大家詳細講講如何利用python Pandas實現(xiàn)批量拆分與合并Excel,文中有非常詳細的的代碼示例,對正在學(xué)習(xí)python的小伙伴們很有幫助,需要的朋友可以參考下2022-05-05pandas根據(jù)指定條件篩選數(shù)據(jù)的實現(xiàn)示例
條件篩選是pandas中非常重要的一個功能,它允許我們根據(jù)特定條件來快速、高效地篩選數(shù)據(jù),本文主要介紹了pandas根據(jù)指定條件篩選數(shù)據(jù)的實現(xiàn)示例,具有一定的參考價值,感興趣的可以了解一下2024-03-03python爬蟲入門教程--利用requests構(gòu)建知乎API(三)
這篇文章主要給大家介紹了關(guān)于python爬蟲入門之利用requests構(gòu)建知乎API的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起看看吧。2017-05-05Django項目創(chuàng)建及管理實現(xiàn)流程詳解
這篇文章主要介紹了Django項目創(chuàng)建及管理實現(xiàn)流程詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-10-10