当前位置: 首页 > 后端技术 > Python

Serverless架构如何获取用户IP和归属运营商

时间:2023-03-26 18:24:54 Python

这几天一直在思考。通过ServerlessFramework做一些事情很有趣。思前想后,我决定基于腾讯云Serverless架构搭建一个APICenter。API市场。简单愉快,创建一个Project,全程用Python3.6开发。同时我也会将这一系列的项目开源到https://github.com/anycodes/S...github.com废话不多说,先来第一个有趣的获取用户IP和IP地址的API,通过搜索引擎,我们可以查看自己的IP地址:我们可以通过浏览器抓包获取本次请求的接口:通过接口的简化,可以确定请求链接获取我的IP地址是:https://sp0.baidu.com/8aQDcjqpAAV3otqbppnN2DJv/api.php?query=192.168.1.1&co=&resource_id=6006接下来我们可以通过Python编程来实现这个功能:#-*-coding:utf-8-*-importurllib.requestimportjsonimportuuiddefreturn_msg(error,msg):return_data={"uuid":str(uuid.uuid1()),"error":错误,"message":msg}print(return_data)returnreturn_datadefget_ip_addr(ip):url="https://sp0.baidu.com/8aQDcjqpAAV3otqbppnN2DJv/api.php?query=%s&co=&resource_id=6006"%ipip_data=json.loads(urllib.request.urlopen(url=url).read().decode("gbk"))如果ip_data["data"]和len(ip_data["data"])>0:返回ip_data["data"][0]["location"]否则:返回Falsedefmain_handler(event,context):try:user_ip=event["requestContext"]["sourceIp"]location=get_ip_addr(user_ip)iflocation:returnreturn_msg(False,{"ip":user_ip,"location":location})else:returnreturn_msg(True,"不能正确获得IP地址")exceptexceptionase:print(e)returnreturn_msg(True,"内部错误")deftest():event={"requestContext":{"serviceId":"service-f94sy04v","path":"/test/{path}",“httpMethod”:“POST”,“requestId”:“c6af9ac6-7b61-11e6-9a41-93e8deadbeef”,“身份”:{“secretId”:“abdcdxxxxxxxsdfs”},“sourceIp”:“14.17.22.34”,“阶段":"release"},"headers":{"Accept-Language":"en-US,en,cn","Accept":"text/html,application/xml,application/json","Host":"service-3ei3tii4-251000691.ap-guangzhou.apigateway.myqloud.com","User-Agent":"UserAgentString"},"body":"{\"test\":\"body\"}","pathParameters":{"path":"value"},"queryStringParameters":{"foo":"bar"},"headerParameters":{"Refer":"10.0.2.14"},"stageVariables":{"stage":"release"},"path":"/test/value","queryString":{"foo":"bar","bob":"alice"},"httpMethod":"POST"}print(main_handler(event,None))if__name__=="__main__":test()测试运行:编写ServerlessFramework的Yaml:get_user_ip:component:"@serverless/tencent-scf"inputs:name:myapi_get_user_ipcodeUri:./get_user_iphandler:index.main_handlerruntime:Python3.6region:ap-beijingdescription:获取用户的IP相关信息memorySize:64timeout:2events:-apigw:name:serverlessparameters:serviceId:service-8d3fi753环境:发布端点:-路径:/get_user_ip描述:获取用户IP相关信息方法:GETenableCORS:true我这里指定了一个APIGW,因为我已经提前建立好了接下来就可以部署了:部署完成后,可以看看我们的效果:至此,我们就完成了查询IP的小工具。当然,如果用户主动查询IP地址呢?我们可以修改代码:Serverless.yaml进行简单升级:get_user_ip:component:"@serverless/tencent-scf"inputs:name:myapi_get_user_ipcodeUri:./get_user_iphandler:index.main_handlerruntime:Python3.6region:ap-beijing描述:获取用户IP相关信息memorySize:64timeout:2events:-apiw:name:serverlessparameters:serviceId:service-8d3fi753environment:releaseendpoints:-path:/get_user_ip描述:获取用户IP相关信息方法:POSTenableCORS:trueparam:-name:ipposition:BODYrequired:'FALSE'type:stringdesc:ipaddressDeployagain:部署完成后:Test1:Test2:至此,我们完成了第一个API:查询IP地址