• 关于 模拟登录python 的搜索结果

问题

【技术干货】Python之模拟http请求测试

驻云科技 2019-12-01 21:32:34 6194 浏览量 回答数 1

回答

pyv8 试试,pyv8对js的解析兼容可能不好,要是不行你可以换个思路去模拟登录。先用python调用浏览器,浏览器可以很好的解析js 登录之后拿到cookie 然后在回到urllib2 等库 继续进行你要的操作,至于python调用浏览器登录 方案比较多 selenium 、phantomjs......phantomjs 是一个基于webkit的浏览器接口,python可以很方便的调用 ######不是很懂JS,看这个JS应该是在用RSA算法去加密,我在想如果能用python同样按照这个算法加密密码之后再post应该就可以搞定,就是不知道怎么去模拟。######刚才回复没有成功。现在遇到和楼主当年一样的问题,请问方面楼主如何解决的这个问题?还请指教,多谢######没解决,用python代码实在难以写这个类库,这个js代码目前我还读不懂。我放弃当时这个方案了。你非要硬着头皮搞下去的话,可以考虑phantomjs的方案,让浏览器帮你执行这个js

kun坤 2020-06-11 09:41:46 0 浏览量 回答数 0

问题

各大网站的Python爬取登录汇总—含教程

珍宝珠 2020-01-13 11:06:42 336 浏览量 回答数 1

新用户福利专场,云服务器ECS低至102元/年

新用户专场,1核2G 102元/年起,2核4G 699.8元/年起

问题

请教python爬虫问题,模拟登陆,python报错

python小菜菜 2020-05-27 15:25:34 5 浏览量 回答数 1

问题

您好,我使用您的itunes模拟遇到问题? 400 报错

爱吃鱼的程序员 2020-06-01 14:17:42 0 浏览量 回答数 1

问题

RSA加密过的表单密码用python怎么模拟?报错 

kun坤 2020-06-10 09:37:07 3 浏览量 回答数 1

问题

请教python爬虫问题,模拟登陆:报错

kun坤 2020-06-06 13:34:34 0 浏览量 回答数 1

回答

Py2.x: Urllib库Urllin2库Py3.x: Urllib库变化: 在Pytho2.x中使用import urllib2——-对应的,在Python3.x中会使用import urllib.request,urllib.error。在Pytho2.x中使用import urllib——-对应的,在Python3.x中会使用import urllib.request,urllib.error,urllib.parse。在Pytho2.x中使用import urlparse——-对应的,在Python3.x中会使用import urllib.parse。在Pytho2.x中使用import urlopen——-对应的,在Python3.x中会使用import urllib.request.urlopen。在Pytho2.x中使用import urlencode——-对应的,在Python3.x中会使用import urllib.parse.urlencode。在Pytho2.x中使用import urllib.quote——-对应的,在Python3.x中会使用import urllib.request.quote。在Pytho2.x中使用cookielib.CookieJar——-对应的,在Python3.x中会使用http.CookieJar。在Pytho2.x中使用urllib2.Request——-对应的,在Python3.x中会使用urllib.request.Request。快速爬取一个网页import urllib.request file=urllib.request.urlopen('http://www.baidu.com') data=file.read() #读取全部 dataline=file.readline() #读取一行内容 fhandle=open("./1.html","wb") #将爬取的网页保存在本地fhandle.write(data)fhandle.close() 浏览器的模拟应用场景:有些网页为了防止别人恶意采集其信息所以进行了一些反爬虫的设置,而我们又想进行爬取。 解决方法:设置一些Headers信息(User-Agent),模拟成浏览器去访问这些网站。 import urllib.requestimport urllib.parse url = 'http://www.baidu.com'header = { 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.96 Safari/537.36'} request = urllib.request.Request(url, headers=header)reponse = urllib.request.urlopen(request).read() fhandle = open("./baidu.html", "wb")fhandle.write(reponse)fhandle.close() 代理服务器的设置应用场景:使用同一个IP去爬取同一个网站上的网页,久了之后会被该网站服务器屏蔽。 解决方法:使用代理服务器。 (使用代理服务器去爬取某个网站的内容的时候,在对方的网站上,显示的不是我们真实的IP地址,而是代理服务器的IP地址) def use_proxy(proxy_addr,url): import urllib.request proxy=urllib.request.ProxyHandler({'http':proxy_addr}) opener=urllib.request.build_opener(proxy,urllib.request.HTTPHandler) urllib.request.install_opener(opener) data=urllib.request.urlopen(url).read().decode('utf8') return data proxy_addr='61.163.39.70:9999'data=use_proxy(proxy_addr,'http://www.baidu.com')print(len(data)) Cookie的使用应用场景:爬取的网页涉及登录信息。访问每一个互联网页面,都是通过HTTP协议进行的,而HTTP协议是一个无状态协议,所谓的无状态协议即无法维持会话之间的状态。 import urllib.requestimport urllib.parseimport urllib.errorimport http.cookiejar url='http://bbs.chinaunix.net/member.php?mod=logging&action=login&loginsubmit=yes&loginhash=La2A2'data={ 'username':'zhanghao', 'password':'mima', }postdata=urllib.parse.urlencode(data).encode('utf8')header={ 'User-Agent':'Mozilla/5.0 (X11; Fedora; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36' } request=urllib.request.Request(url,postdata,headers=header) 使用http.cookiejar.CookieJar()创建CookieJar对象 cjar=http.cookiejar.CookieJar() 使用HTTPCookieProcessor创建cookie处理器,并以其为参数构建opener对象 cookie=urllib.request.HTTPCookieProcessor(cjar)opener=urllib.request.build_opener(cookie) 将opener安装为全局 urllib.request.install_opener(opener) try: reponse=urllib.request.urlopen(request) except urllib.error.HTTPError as e: print(e.code) print(e.reason) fhandle=open('./test1.html','wb')fhandle.write(reponse.read())fhandle.close() url2='http://bbs.chinaunix.net/forum-327-1.html' #打开test2.html文件,会发现此时会保持我们的登录信息,为已登录状态。也就是说,对应的登录状态已经通过Cookie保存。reponse2=urllib.request.urlopen(url)fhandle2=open('./test2.html','wb')fhandle2.write(reponse2.read())fhandle2.close()

元芳啊 2019-12-02 01:04:38 0 浏览量 回答数 0

回答

一般我们都通过wireshark抓包分析手动提交的流程数据包交互过程,然后你就可以用python去模拟了,还有session会话很重要。######十分感谢。###### 你应该找到提交的url,对应填入参数格式,post回去 ######回复 @guxingshuo : 看楼下,我比较业余。我只了解登录思路,至于刷新页面,要看楼下专业回答。######额,只能通过外部抓包工具才行吗?######首先访问登录页面,取得并保持sessionId,在后续请求中也一直提交sessionId,这样服务器端才知道这是同一个客户端用户。###### 模拟动作的话找提交的btn,就不用抓包了。  ######十分感谢

kun坤 2020-06-06 13:34:40 0 浏览量 回答数 0

回答

尽量把fildder抓到的http头,都附上。一些比较关键###### 返回值中,header里面会有set-cookie这个值,代表后台的sessionId,将这个值放置在其他请求的header中。 ######没有set-cook,只有好像是sessionid,带上之后也是无效,######最好能给出url隐去的相关代码。也可以搜索一下python模拟登录的各种分享看看。######看看子系统多不多,不多的话,做过滤器看看。######用selenium webdriver啊,稍微慢点但省心省力

kun坤 2020-06-11 14:00:01 0 浏览量 回答数 0

回答

分享一波Github上适合新手入门、又十分 1. 人脸识别 star:30.5k 最简洁的人脸识别库。可以使用Python和命令行工具提取、识别、操作人脸。其人脸识别是基于业内领先的C++开源库dlib中的深度学习模型,用Labeled Faces in the Wild人脸数据集进行测试,准确率高达99.38%。 而且有中文版README哟~ 2. faceai star:5.5k 入门级的人脸、视频、文字检测以及识别的项目。功能包含人脸监测、轮廓识别、头像合成、性别识别、图片修复等。 3.HelloGitHub star:21.4k 面向编程新手的项目,每月 28 号以月刊的形式更新发布。内容包括:流行项目、入门级项目、企业级项目等,这些开源项目大多都是非常容易上手、很 Cool,能够让你用很短时间感受到编程的魅力和便捷。 可以按期数和语言类别选自己感兴趣的项目来练习。 4. 拼图游戏 star:1.1k 源自于一个用Python写各种小游戏的github合集。除了拼图外,还包含坦克大战滑雪者、皮卡丘GOGO、贪吃蛇、推箱子、拼图小游戏,用于练手是极好的。 5. Python练习册 star:10.2k 每天一个简单的小程序,该项目还在持续更新中。比如,将你的 QQ 头像(或者微博头像)右上角加上红色的数字: 6. 用机器学习来减肥 star:3.2k Ariel深受肥胖困扰,想要减肥。他尝试改变饮食习惯,但收效甚微。他通过数据确信,自己并不该着眼于减少脂肪。当然他的身体数据并不适合其他人,我们可以参考他的代码,为自己制定更科学的减重方式。 Ariel过去16个月左右体重与时间的图表 7. 500行以下 star:24k 由N多个子项目组成,每个项目的代码都在500行以内,实现一个完整的功能。 8. 语音对话机器人 star:1.5k 开源中文语音对话机器人/智能音箱项目,支持语音控制家电哦~功能很全,包含: 定时给女友发消息 起床、吃饭、睡前,女神节、女神节、情人节、春节、圣诞节,都可以自动准时发消息给她了,而且还可以让她学习英语单词哦! 最重要的时候,可以实时知道女友的情感情绪指数,再也不用担心女友莫名其妙生气了。 awesome-python-login-model 收集了一些各大网站登陆方式和一些网站的爬虫程序,有的是通过selenium登录,有的是通过抓包直接模拟登录,有的是利用scrapy。对小白友好,这个项目会持续更新。已完成的有:

剑曼红尘 2020-03-11 22:24:46 0 浏览量 回答数 0

回答

"一般我们都通过wireshark抓包分析手动提交的流程数据包交互过程,然后你就可以用python去模拟了,还有session会话很重要。######十分感谢。###### <img src=""http://www.oschina.net/js/ke/plugins/emoticons/images/17.gif"" alt="""" />你应该找到提交的url,对应填入参数格式,post回去 ######回复 @guxingshuo : 看楼下,我比较业余。我只了解登录思路,至于刷新页面,要看楼下专业回答。######额,只能通过外部抓包工具才行吗?######首先访问登录页面,取得并保持sessionId,在后续请求中也一直提交sessionId,这样服务器端才知道这是同一个客户端用户。###### 模拟动作的话找提交的btn,就不用抓包了。  ######十分感谢" ![image.png](https://ucc.alicdn.com/pic/developer-ecology/dbe49caea5e142b097d8618ffbd67259.png)

python小菜菜 2020-05-27 15:37:16 0 浏览量 回答数 0

问题

python怎么爬取天眼查工商基本信息?

游客bnlxddh3fwntw 2020-04-24 22:43:34 19 浏览量 回答数 1

回答

SciHub Desktop这个软件的最初两个版本是用 Python + TK 写的 GUI 程序,主要是为了方便广大研究生突破权限下载英文文献。内含多个文献下载数据源,只要输入文献的 DOI 号,回车就可以自动下载文献全文,非常方便,目前仅网盘的下载量就超过了 30 万人次。Tsing:SciHub Desktop 桌面版软件官方发布页面​ zhuanlan.zhihu.com2. HistCite Pro这个软件是基于 HistCite 内核开发的免安装易用版本,使用 Python 对从 Web of Science 数据库中导出的数据文件进行预处理,然后进行文献引文分析,快速分析出某个研究领域最具有价值的文献和作者,目前也得到了数万用户的使用。Tsing:文献引文分析利器 HistCite 详细使用教程暨 HistCite Pro 首发页面​ zhuanlan.zhihu.com3. 上学吧答案神器这款软件是最近才写的,主要实现的是无限制获取上学吧网站上的题目答案(绕过 IP 限制),并实现了自动识别验证码,只用输入某个题目的网址,即可一键获取答案,速度非常快。Tsing:自动识别验证码无限次获取上学吧的题目答案​ zhuanlan.zhihu.com 4. 破解观看中科大网络课堂 由于 本科四年都在科大,所以那时候也写了好多关于科大的脚本(正是因为太喜欢科大了才会去折腾这些哈),虽然目前有些已经失效了,但是还是值得放出来纪念一下的。 中国科学技术大学网络课堂汇集了很多知名教授的授课视频,以及最新的大牛讲座视频,内容相当丰富,但是这些视频只面向校内 IP 开放。后来不小心找到了网站上的一个漏洞,用 Python 写了不到 10 行代码就可以获取真实视频地址,这样就可以在校外看视频了。(这个漏洞目前已经被修复了,大家就不要找我要代码了哈~) 另外还简单写了一个 GUI 界面,打包成 exe 单软件给室友用,都说挺好用的哈。 5. 抓取研究生系统内全部学生姓名学号及选课信息登录中国科学技术大学的研究生综合系统,可以看到每一门课选课的学生姓名和学号,当时就想到做一个这样的系统,输入任何姓名或学号就可以看到他所有的选课信息。 点击每门课的已选人数链接,可以看到所有的选课学生姓名和学号: 下面利用 requests 的模拟登录功能,先获取全部课程的链接,然后逐个抓取所有课程的选课信息。(为了保护学生信息,对程序的关键部分进行了模糊处理。) 这样就获取了一个巨大的 json 文件,里面全都是学生的姓名、学号以及选课信息: 有了这个 json 文件,我们可以写入数据库,也可以直接利用 json 文件来查询: 为了方便其他人使用,基于上面的数据我开发了一个在线查询网站(目前已下线): 输入姓名或者学号都可以直接查询别人的选课信息: 6. 扫描研究生系统上的弱密码用户基于上面获得的研究生学号,很容易利用 Python 批量尝试登录研究生系统,密码就用 123456 这样的弱密码,然后可以获得身份证号码等重要信息。 这样就得到了使用 123456 作为密码的用户信息,所以在此提醒大家一定不要使用弱密码,希望下面的同学早日修改密码。 7. 模拟登录图书馆系统并自动续借以前收到借阅图书到期通知短信,就会运行一下这个程序,然后就自动续借了,这样就可以再看一个月了。不过后来科大图书馆系统升级了,因此这个方法也就失效了。 运行就是这样的,自动续借成功,看到的链接就是每本书的续借链接。 8. 云短信网站上的验证码短信来源分析这个网站提供了很多免费的临时手机号,用这些公用的手机号你可以注册一些好玩的(或者你懂的)网站和APP,而不用担心个人信息的泄露。于是我用 Python 写了一个爬虫脚本,自动翻页抓取了部分短信内容,然后解析出其中的信息来源并分析一下频次,就发现好几个看名字就挺有意思的 APP 压根没有听过呀,看来是时候用短信验证码的方式登录看看去啦~Tsing:Python爬虫:大家用公共的手机号干了啥?​ zhuanlan.zhihu.com 9. 给钓鱼网站批量提交垃圾信息经常会收到含有钓鱼网站链接的短信的,一般都是盗取 QQ 密码的偏多,其实可以使用 Python 来批量给对方的服务器提交垃圾数据(需要先抓包),这样骗子看到信息之后就不知道哪些是真的哪些是假的了,说不定可以解救一部分填了密码的同学。Tsing:偶遇一个钓鱼网站,于是就简单玩了一下...​ zhuanlan.zhihu.com10. 网易云音乐批量下载可以批量下载网易云音乐热歌榜的歌曲,可以自己设定数量,速度非常快。 # 网易云音乐批量下载 # Tsing 2019.03.28 # 首先,找到你要下载的歌曲,用网页版打开,复制链接中的歌曲ID,如:http://music.163.com/#/song?id=476592630 这个链接ID就是 476592630 # 然后将ID替换到链接 http://music.163.com/song/media/outer/url?id=ID.mp3 中的ID位置即可获得歌曲的外链:http://music.163.com/song/media/outer/url?id=476592630.mp3 import requests # 用于获取网页内容的模块 from bs4 import BeautifulSoup # 用于解析网页源代码的模块 header={ # 伪造浏览器头部,不然获取不到网易云音乐的页面源代码。 'User-Agent':'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36', 'Referer':'http://93.174.95.27', } link = "http://music.163.com/discover/toplist?id=3778678" # 这是网易云音乐热歌榜的链接(其实是嵌套在网页里面含有歌曲数据的页面框架的真实链接) r = requests.get(link, headers=header) # 通过 requests 模块的 get 方法获取网页数据 html = r.content # 获取网页内容 soup = BeautifulSoup(html, "html.parser") # 通过 BeautifulSoup 模块解析网页,具体请参考官方文档。 songs = soup.find("ul", class_="f-hide").select("a", limit=10) # 通过分析网页源代码发现排行榜中的歌曲信息全部放在类名称为 f-hide 的 ul 中,于是根据特殊的类名称查找相应 ul,然后找到里面的全部 a 标签,限制数量为10,即排行榜的前 10 首歌。

游客bnlxddh3fwntw 2020-04-25 14:35:08 0 浏览量 回答数 0

问题

用python登陆新浪微博手机端weibo.cn遇到302重定向如何解决? 400 报错

爱吃鱼的程序员 2020-05-31 00:36:57 0 浏览量 回答数 1

回答

其实这个问题是因为我自己没有注意post请求,下面是代码 importjsonimporturllib2,urllibparams=urllib.urlencode({'param':json.dumps({'type':'2','loginName':'13983643158','password':'6aa5e3cc0678b335a9547f60045baa6b','systemVersion':'6.1.2'})})printparamsf=urllib.urlopen("http://192.168.1.104:8080/line/user/login.mlk",params)data=f.read()print(data)ddata=json.loads(data)print(ddata)type(ddata)print(ddata['data']) httplib.HTTPConnection(host[,port[,strict[,timeout]]])  看,手册!!!!!!!!!!!!!!!!!!!!!!!!! 回复 @geminiblue:请教下呢,调试了下,解析不到jsonHTTPConnection.request(method,url[,body[,headers]])socket.gaierror:[Errno11001]getaddrinfofailed开错误代码,那就是说明你请求的地址都解析失败了不是给你发上去吗.httplib.HTTPConnection挂掉了request=urllib2.Request(posturl,postData,headers)这样不行?指教下呢,importhttplib importjson importurllib try:   conn=httplib.HTTPConnection("127.0.0.1",8080) exceptException,e:   printe headers={"Content-Type":"application/x-www-form-urlencoded"} param=({"type":"2","loginName":"13983643100","password":"6aa5e3cc0678b335a9547f60045baa6b","systemVersion":"6.1.2"}) conn.request("POST","/index.php/site/index",urllib.urlencode(param),headers) response=conn.getresponse() data=response.read() print(data) conn.close() importhttplib  importjson  importurllib  try:    conn=httplib.HTTPConnection("127.0.0.1",8080)  exceptException,e:    printe  headers={"Content-Type":"application/json"}  param=({"type":"2","loginName":"13983643100","password":"6aa5e3cc0678b335a9547f60045baa6b","systemVersion":"6.1.2"}) conn.request("POST","/index.php/site/index", json.JSONEncoder().encode(param),headers)  response=conn.getresponse()  data=response.read()  print(data)  conn.close()  -------------------------------------------------------- 没注意你用json的方式提交的,不过不影响,给你改改.......错误出在httpconnection那块了,不要带http://这样的东西 {"state":-1,"msg":"登录信息为空"}返回的时候数据是这样的,不知道是不是data设置不对! 我之前都是直接用urllib2,还是比http更方便的。 供参考: Python专题教程:抓取网站,模拟登陆,抓取动态网页 中的: 【教程】模拟登陆网站之Python版(内含两种版本的完整的可运行的代码) 谢谢。

爱吃鱼的程序员 2020-06-22 18:17:02 0 浏览量 回答数 0

回答

其实这个问题是因为我自己没有注意post请求,下面是代码 import json import urllib2,urllib params = urllib.urlencode({'param': json.dumps({'type':'2','loginName':'13983643158','password':'6aa5e3cc0678b335a9547f60045baa6b','systemVersion':'6.1.2'})}) print params f = urllib.urlopen("http://192.168.1.104:8080/line/user/login.mlk",params) data= f.read() print(data) ddata=json.loads(data) print(ddata) type(ddata) print(ddata['data']) ###### httplib.HTTPConnection ( host [ , port [ , strict [ , timeout ]]] )  看,手册!!!!!!!!!!!!!!!!!!!!!!!!! ######回复 @geminiblue : 请教下呢,调试了下,解析不到json######HTTPConnection.request ( method , url [ , body [ , headers ]] )######socket.gaierror: [Errno 11001] getaddrinfo failed 开错误代码,那就是说明你请求的地址都解析失败了 不是给你发上去吗.httplib.HTTPConnection挂掉了######request = urllib2.Request(posturl, postData, headers) 这样不行?######指教下呢,######import httplib import json import urllib try:     conn = httplib.HTTPConnection("127.0.0.1",8080) except Exception,e:     print e headers = {"Content-Type":"application/x-www-form-urlencoded"} param = ({"type":"2","loginName":"13983643100","password":"6aa5e3cc0678b335a9547f60045baa6b","systemVersion":"6.1.2"}) conn.request("POST" ,"/index.php/site/index", urllib.urlencode(param), headers) response = conn.getresponse() data = response.read() print(data) conn.close() ###### import httplib  import json  import urllib  try:      conn = httplib.HTTPConnection("127.0.0.1",8080)  except Exception,e:      print e  headers = {"Content-Type":"application/json"}  param = ({"type":"2","loginName":"13983643100","password":"6aa5e3cc0678b335a9547f60045baa6b","systemVersion":"6.1.2"}) conn.request("POST" ,"/index.php/site/index", json.JSONEncoder().encode(param), headers)  response = conn.getresponse()  data = response.read()  print(data)  conn.close()  -------------------------------------------------------- 没注意你用json的方式提交的,不过不影响,给你改改.......错误出在httpconnection那块了,不要带http://这样的东西 ######{"state":-1,"msg":"登录信息为空"} 返回的时候数据是这样的,不知道是不是data设置不对!###### 我之前都是直接用urllib2,还是比http更方便的。 供参考: Python专题教程:抓取网站,模拟登陆,抓取动态网页 中的: 【教程】模拟登陆网站 之 Python版(内含两种版本的完整的可运行的代码) ######谢谢。

爱吃鱼的程序员 2020-06-05 12:49:48 0 浏览量 回答数 0

问题

模拟登录163邮箱

游客bnlxddh3fwntw 2020-04-25 14:23:37 14 浏览量 回答数 1

问题

python urllib2模拟登录返回cookies问题?报错

爱吃鱼的程序员 2020-06-09 16:43:17 0 浏览量 回答数 1

问题

VS2015与.NET4.6发布,为开发提供数百新功能

sunny夏筱 2019-12-01 21:55:59 12222 浏览量 回答数 3

问题

程序员报错QA大分享(1)

问问小秘 2020-06-18 15:46:14 8 浏览量 回答数 1

回答

前言概述 本文介绍了使用函数计算部署深度学习 AI 推理的最佳实践, 其中包括使用 FUN 工具一键部署安装第三方依赖、一键部署、本地调试以及压测评估, 全方位展现函数计算的开发敏捷特性、自动弹性伸缩能力、免运维和完善的监控设施。 1.1 DEMO 概述 image 通过上传一个猫或者狗的照片, 识别出这个照片里面的动物是猫还是狗 DEMO 示例效果入口: http://sz.mofangdegisn.cn DEMO 示例工程地址: https://github.com/awesome-fc/cat-dog-classify 开通服务 免费开通函数计算, 按量付费,函数计算有很大的免费额度。 免费开通文件存储服务NAS, 按量付费 1.2 解决方案 image 如上图所示, 当多个用户通过对外提供的 url 访问推理服务时候,每秒的请求几百上千都没有关系, 函数计算平台会自动伸缩, 提供足够的执行实例来响应用户的请求, 同时函数计算提供了完善的监控设施来监控您的函数运行情况。 1.3. Serverless 方案与传统自建服务方案对比 1.3.1 卓越的工程效率 自建服务 函数计算 Serverless 基础设施 需要用户采购和管理 无 开发效率 除了必要的业务逻辑开发,需要自己建立相同线上运行环境, 包括相关软件的安装、服务配置、安全更新等一系列问题 只需要专注业务逻辑的开发, 配合 FUN 工具一键资源编排和部署 学习上手成本 可能使用 K8S 或弹性伸缩( ESS ),需要了解更多的产品、名词和参数的意义 会编写对应的语言的函数代码即可 1.3.2 弹性伸缩免运维 自建服务 函数计算 Serverless 弹性高可用 需要自建负载均衡 (SLB),弹性伸缩,扩容缩容速度较 FC 慢 FC系统固有毫秒级别弹性伸缩,快速实现底层扩容以应对峰值压力,免运维 监控报警查询 ECS 级别的 metrics 提供更细粒度的函数执行情况,每次访问函数执行的 latency 和日志等, 更加完善的报警监控机制 1.3.3 更低的成本 函数计算 (FC) 固有自动伸缩和负载均衡功能,用户不需要购买负载均衡 (SLB) 和弹性伸缩。 具有明显波峰波谷的用户访问场景(比如只有部分时间段有请求,其他时间甚至没有请求),选择按需付费,只需为实际使用的计算资源付费。 对于明显波峰波谷或者稀疏调用具有低成本优势, 同时还保持了弹性能力,以后业务规模做大以后并没有技术切换成本,同时财务成本增长配合预付费也能保持平滑。 部分请求持续平稳的场景下,可以配合预付费解决按需付费较高单价问题。函数计算成本优化最佳实践文档。 假设有一个在线计算服务,由于是CPU 密集型计算, 因此在这里我们将平均 CPU 利用率作为核心参考指标对成本,以一个月为周期,10台 C5 ECS 的总计算力为例,总的计算量约为 30% 场景下, 各解决方案 CPU 资源利用率使用情况示意图大致如下: image 由上图预估出如下计费模型: 函数计算预付费 3CU 一个月: 246.27 元, 计算能力等价于 ECS 计算型 C5 ECS 计算型 C5 (2vCPU,4GB)+云盘: 包月219 元,按量: 446.4 元 包月10 Mbps 的 SLB: 526.52 元(这里做了一定的流量假设), 弹性伸缩免费 饱和使用下,函数计算按量付费的一台机器成本约为按量付费 C5 ECS 的2 倍 平均CPU使用率 计算费用 SLB 总计 函数计算组合付费 >=80% 738+X(246.273+X) 无 <= 738+X 按峰值预留ECS <=30% 2190(10219) 526.52 >=2716.52 弹性伸缩延迟敏感 <=50% 1314(102193/5) 526.52 >= 1840.52 弹性伸缩成本敏感 <=70% 938.57 (102193/7) 526.52 >= 1465.09 注: 这里假设函数逻辑没有公网下行流量费用, 即使有也是一致的, 这里成本比较暂不参与 延时敏感,当 CPU 利用率大于等于 50% 就需要开始进行扩容,不然更来不及应对峰值 成本敏感,当 CPU 利用率大约 80% 即开始进行扩容, 能容受一定几率的超时或者5XX 上表中, 其中函数计算组合付费中的 X 为按需付费的成本价,假设按需付费的计算量占整个计算量的 10%,假设 CPU 利用率为100%, 对应上表,那么需要 3 台 ECS 的计算能力即可。因此 FC 按量付费的成本 X = 3 ️ 446.4 ️ 10% ️ 2 = 267.84 ( FC 按量付费是按量 ECS 的2倍),这个时候函数计算组合付费总计 1005.8 元。 在这个模型预估里面, 只要 FC 按量付费占整个计算量小于 20%, 即使不考虑 SLB, 单纯考虑计算成本, 都是有一定优势的。 1.3.4. 小结 基于函数计算进行 AI 推理等 CPU 密集型的主要优势: 上手简单, 只专注业务逻辑开发, 极大提高工程开发效率。 自建方案有太多学习和配置成本,如针对不同场景,ESS 需要做各种不同的参数配置 系统环境的维护升级等 免运维,函数执行级别粒度的监控和告警。 毫秒级弹性扩容,保证弹性高可用,同时能覆盖延迟敏感和成本敏感类型。 在 CPU 密集型的计算场景下, 通过设置合理的组合计费模式, 在如下场景中具有成本优势: 请求访问具有明显波峰波谷, 其他时间甚至没有请求 有一定稳定的负载请求, 但是有部分时间段请求量突变剧烈 打包代码ZIP包和部署函数 FUN 操作简明视频教程 开通服务 免费开通函数计算, 按量付费,函数计算有很大的免费额度。 免费开通文件存储服务NAS, 按量付费 2.1 安装第三方包到本地并上传到NAS 2.1.1 安装最新的Fun 安装版本为8.x 最新版或者10.x 、12.x nodejs 安装 funcraf 2.1.2 Clone 工程 & Fun 一键安装第三方库到本地 git clone https://github.com/awesome-fc/cat-dog-classify.git 复制 .env_example 文件为 .env, 并且修改 .env 中的信息为自己的信息 执行 fun install -v, fun 会根据 Funfile 中定义的逻辑安装相关的依赖包 image root@66fb3ad27a4c: ls .fun/nas/auto-default/classify model python root@66fb3ad27a4c: du -sm .fun 697 .fun 根据 Funfile 的定义: 将第三方库下载到 .fun/nas/auto-default/classify/python 目录下 本地 model 目录移到 .fun/nas/auto-default/model 目录下 安装完成后,从这里我们看出, 函数计算引用的代码包解压之后已经达到了 670 M, 远超过 50M 代码包限制, 解决方案是 NAS 详情可以参考: 挂载NAS访问,幸运的是 FUN 工具一键解决了 nas 的配置和文件上传问题。 2.1.3. 将下载的依赖的第三方代码包上传到 NAS fun nas init fun nas info fun nas sync fun nas ls nas://classify:/mnt/auto/ 依次执行这些命令,就将本地中的 .fun/nas/auto-default 中的第三方代码包和模型文件传到 NAS 中, 依次看下这几个命令的做了什么事情: fun nas init: 初始化 NAS, 基于您的 .env 中的信息获取(已有满足条件的nas)或创建一个同region可用的nas fun nas info: 可以查看本地 NAS 的目录位置, 对于此工程是 $(pwd)/.fun/nas/auto-default/classify fun nas sync: 将本地 NAS 中的内容(.fun/nas/auto-default/classify)上传到 NAS 中的 classify 目录 fun nas ls nas:///mnt/auto/: 查看我们是否已经正确将文件上传到了 NAS 登录 NAS 控制台 https://nas.console.aliyun.com 和 VPC 控制台 https://vpc.console.aliyun.com可以观察到在指定的 region 上有 NAS 和相应的 vpc 创建成功 2.2 本地调试函数 在 template.yml 中, 指定了这个函数是 http 类型的函数, 所以根据 fun 的提示: Tips for next step Invoke Event Function: fun local invokeInvoke Http Function: fun local startBuild Http Function: fun buildDeploy Resources: fun deploy 执行 fun local start, 本地就会启动一个 http server 来模拟函数的执行, 然后我们 client 端可以使用 postman, curl 或者浏览器, 比如对于本例: image image 2.3 部署函数到FC平台 本地调试OK 后,我们接下来将函数部署到云平台: 修改 template.yml LogConfig 中的 Project, 任意取一个不会重复的名字即可,有两处地方需要更改,然后执行 fun deploy 注意: template.yml 注释的部分为自定义域名的配置, 如果想在 fun deploy 中完成这个部署工作: 先去域名解析, 比如在示例中, 将域名 sz.mofangdegisn.cn 解析到 123456.cn-hangzhou.fc.aliyuncs.com, 对应的域名、accountId 和 region 修改成自己的 去掉 template.yml 中的注释, 修改成自己的域名 执行 fun deploy 这个时候如果没有自定义域名, 直接通过浏览器访问http trigger 的url, 比如 https://123456.cn-shenzhen.fc.aliyuncs.com/2016-08-15/proxy/classify/cat-dog/ 会被强制下载. 原因:https://help.aliyun.com/knowledge_detail/56103.html#HTTP-Trigger-compulsory-header image 登录控制台https://fc.console.aliyun.com,可以看到service 和函数已经创建成功,并且 service 也已经正确配置。 image 在这里,我们发现第一次打开页面访问函数的时候,执行环境实例冷启动时间非常长, 如果是一个在线AI推理服务,对响应时间非常敏感,冷启动引起的毛刺对于这种类型的服务是不可接受的,接下来,本文讲解如何利用函数计算的预留模式来消除冷启动带来的负面影响。 使用预留模式消除冷启动毛刺 函数计算具有动态伸缩的特性, 根据并发请求量,自动弹性扩容出执行环境来执行环境,在这个典型的深度学习示例中,import keras 消耗的时间很长 , 在我们设置的 1 G 规格的函数中, 并发访问的时候耗时10s左右, 有时甚至20s+ start = time.time() from keras.models import model_from_json print("import keras time = ", time.time()-start) 3.1 函数计算设置预留 预留操作简明视频教程 在 FC 控制台,发布版本,并且基于该版本创建别名 prod,并且基于别名 prod 设置预留, 操作过程请参考:https://help.aliyun.com/document_detail/138103.html 将该函数的 http trigger 和自定义域名的设置执行 prod 版本 image image 一次压测结果 imageimage 从上面图中我们可以看出,当函数执行的请求到来时,优先被调度到预留的实例中被执行, 这个时候是没有冷启动的,所以请求是没有毛刺的, 后面随着测试的压力不断增大(峰值TPS 达到 1184), 预留的实例不能满足调用函数的请求, 这个时候函数计算就自动进行按需扩容实例供函数执行,此时的调用就有冷启动的过程, 从上面我们可以看出,函数的最大 latency 时间甚至达到了 32s,如果这个web AP是延时敏感的,这个 latency 是不可接受的。 总结 函数计算具有快速自动伸缩扩容能力 预留模式很好地解决了冷启动中的毛刺问题 开发简单易上手,只需要关注具体的代码逻辑, Fun 工具助您一键式部署运用 函数计算具有很好监控设施, 您可以可视化观察您函数运行情况, 执行时间、内存等信息

1934890530796658 2020-03-27 18:21:48 0 浏览量 回答数 0
阿里云大学 云服务器ECS com域名 网站域名whois查询 开发者平台 小程序定制 小程序开发 国内短信套餐包 开发者技术与产品 云数据库 图像识别 开发者问答 阿里云建站 阿里云备案 云市场 万网 阿里云帮助文档 免费套餐 开发者工具 SQL审核 小程序开发制作 视频内容分析 企业网站制作 视频集锦 代理记账服务 2020阿里巴巴研发效能峰会 企业建站模板 云效成长地图 高端建站 人工智能 阿里云云栖号 云栖号案例 云栖号直播