url

浏览器输入URL按回车后都经历了什么?

孤街浪徒 提交于 2020-03-08 19:58:55
在浏览器上输入一个URL,按回车后,这个过程发生了什么? 1、首先,浏览器地址栏输入了URL,先解析URL,检测URL地址是否合法 2、浏览器先查看浏览器缓存-系统缓存-路由器缓存,如果缓存中有,会直接在屏幕中显示页面内容。 浏览器缓存:浏览器会记录DNS一段时间,因此,只是第一个地方解析DNS请求; 操作系统缓存:如果在浏览器缓存中不包含这个记录,则会使用系统调用操作系统,获取操作系统的记录(保存最近的DNS查询缓存) 路由器缓存:如果上述两个步骤均不能成功获取DNS记录,继续搜索路由器缓存。 ISP缓存:若上述均失败,继续向ISP搜索。 3、如果没有上述缓存,则在发送HTTP请求前,需要域名解析(DNS解析),解析获取相关的IP地址。 4、浏览器向服务器发起tcp连接,与浏览器简历tcp三次握手 5、握手成功后,浏览器向服务器发送HTTP请求,请求数据包 6、服务器处理收到的请求,将数据返回至浏览器 7、浏览器收到HTTP响应 8、浏览器解码响应,如果响应可以缓存,则存入缓存 9、浏览器发送请求获取嵌入在HTML中的资源(HTML、css、javasc、图片、音乐。。。。). 10、浏览器发送异步请求 11、页面全部渲染结束 来源: https://www.cnblogs.com/lanyy/p/10793382.html

Python3爬虫(十二) 爬虫性能

陌路散爱 提交于 2020-03-08 17:24:56
Infi-chu: http://www.cnblogs.com/Infi-chu/ 一、简单的循环串行 一个一个循环,耗时是最长的,是所有的时间综合 import requests url_list = [ 'http://www.baidu.com', 'http://www.pythonsite.com', 'http://www.cnblogs.com/' ] for url in url_list: result = requests.get(url) print(result.text) 二、通过线程池 整体耗时是所有连接里耗时最久的那个,相对于循环来说快了不少 import requests from concurrent.futures import ThreadPoolExecutor def fetch_request(url): result = requests.get(url) print(result.text) url_list = [ 'http://www.baidu.com', 'http://www.bing.com', 'http://www.cnblogs.com/' ] pool = ThreadPoolExecutor(10) for url in url_list: #去线程池中获取一个线程,线程去执行fetch_request方法

深入golang之---goroutine并发控制与通信

*爱你&永不变心* 提交于 2020-03-08 11:49:42
深入golang之—goroutine并发控制与通信 开发go程序的时候,时常需要使用goroutine并发处理任务,有时候这些goroutine是相互独立的,而有的时候,多个goroutine之间常常是需要同步与通信的。另一种情况,主goroutine需要控制它所属的子goroutine,总结起来,实现多个goroutine间的同步与通信大致有: - 全局共享变量 - channel通信(CSP模型) - Context包 本文章通过goroutine同步与通信的一个典型场景-通知子goroutine退出运行,来深入讲解下golang的控制并发。 通知多个子goroutine退出运行 goroutine作为go语言的并发利器,不仅性能强劲而且使用方便:只需要一个关键字go即可将普通函数并发执行,且goroutine占用内存极小(一个goroutine只占2KB的内存),所以开发go程序的时候很多开发者常常会使用这个并发工具,独立的并发任务比较简单,只需要用go关键字修饰函数就可以启用一个goroutine直接运行;但是,实际的并发场景常常是需要进行协程间的同步与通信,以及精确控制子goroutine开始和结束,其中一个典型场景就是主进程通知名下所有子goroutine优雅退出运行。 由于goroutine的退出机制设计是,goroutine退出只能由本身控制

iOS开发缓存机制之—内存缓存机制

北战南征 提交于 2020-03-08 11:12:56
在IOS应用程序开发中,为了减少与服务端的交互次数,加快用户的响应速度,一般都会在iOS设备中加一个缓存的机制。 这篇文章将介绍一下如何在iOS设备中进行缓存,本文先介绍一下将内容缓存到内存中,下一篇文章就介绍一下在iOS磁盘上缓存内容。 使用缓存的目的是为了使用的应用程序能更快速的响应用户输入,是程序高效的运行。有时候我们需要将远程web服务器获取的数据缓存起来,减少对同一个url多次请求。 内存缓存我们可以使用sdk中的NSURLCache类。NSURLRequest需要一个缓存参数来说明它请求的url何如缓存数据的,我们先看下它的CachePolicy类型。 1、NSURLRequestUseProtocolCachePolicy NSURLRequest默认的cache policy,使用Protocol协议定义。 2、NSURLRequestReloadIgnoringCacheData 忽略缓存直接从原始地址下载。 3、NSURLRequestReturnCacheDataElseLoad 只有在cache中不存在data时才从原始地址下载。 4、NSURLRequestReturnCacheDataDontLoad 只使用cache数据,如果不存在cache,请求失败;用于没有建立网络连接离线模式; 5

爬虫之http协议学习笔记

假装没事ソ 提交于 2020-03-08 10:29:38
No one and you.无人及你 文章目录 1.什么是http协议和https协议 2.在浏览器中发送一个http请求的过程 3.url详解 4.常用的请求方法 5.请求头常见参数 6.常见的响应状态码 1.什么是http协议和https协议: http协议: 全称是HyperText Transfer Protocol,中文意思是超文本传输协议,是一种发布和接收HTML页面的方法。服务器端口是80端口。 https协议: 是HTTP协议的加密版本,在HTTP下加入了SSL层,服务器端口是443端口。 2.在浏览器中发送一个http请求的过程: ①.当用户在浏览器的地址栏中输入一个URL并按回车键之后,浏览器回向HTTP服务器发送HTTP请求。HTTP请求主要分为‘Get’和‘Post’两种方法。 ②.当我们在浏览器输入URL:http://www.baidu.com的时候,浏览器发送一个Request请求去获取Http://www.baidu.com的html文件,服务器把Response文件对象发送回给浏览器 ③.浏览器分析Response中的HTML,发现其中引用了很多其他文件,比如Images文件,css文件,JS文件。浏览器会自动再次发送Request去获取图片,css文件,或js文件。 ④.当所有的文件都下载成功后,网页会根据HTML语法结构,完整的显示出来了。

OWASP TOP 10

我们两清 提交于 2020-03-08 08:35:07
TOP1-注入 注入往往是应用程序缺少对输入进行安全型检查引起的,攻击者把一些包含指令的数据发送给解释器,解释器收到数据后转换成指令执行,常见的注入包括SQL注入、系统命令注入、IDAP注入,xpath注入等 危害: 注入可以导致数据的丢失,或者敏感数据的泄露,有时注入漏洞可以导致主机完全失陷。 防范: 1、使用安全的API,避免使用解释器 2、对输入的特殊字符进行转义处理 3、利用白名单来规范输入验证 TOP2-失效的身份认证和会话管理 开发者通常会建立自定义的认证和会话管理方案。但与身份认证和回话管理相关的应用程序功能往往得不到正确的实现,要正确实现这些方案却很难,结果在退出、密码管理、超时、密码找回、帐户更新等方面存在漏洞,这就导致了攻击者破坏密码、密钥、会话令牌或攻击其他的漏洞去冒充其他用户的身份 危害: 可能导致部分甚至全部账户遭到攻击,一旦攻击成功,攻击者就能执行合法的任何操作 检测: 用户身份验证凭证没有使用哈希或加密保护 认证凭证可猜测,或者能够通过薄弱的的帐户管理功能(例如账户创建、密码修改、密码恢复, 弱会话ID)重写 会话ID暴露在URL里 (例如URL重写) 会话ID容易受到会话固定(session fixation)的攻击 会话ID没有超时限制,或者用户会话或身份验证令牌特别是单点登录令牌在用户注销时没有失效 成功注册后,会话ID没有轮转 密码

PhantomJS快速入门

只愿长相守 提交于 2020-03-08 08:17:10
本文简要介绍了PhantomJS的相关基础知识点,主要包括PhantomJS的介绍、下载与安装、HelloWorld程序、核心模块介绍等。由于鄙人才疏学浅,难免有疏漏之处,欢迎指正交流。   1、PhantomJS是什么?   PhantomJS是一个基于webkit的JavaScript API。它使用QtWebKit作为它核心浏览器的功能,使用webkit来编译解释执行JavaScript代码。任何你可以在基于webkit浏览器做的事情,它都能做到。它不仅是个隐形的浏览器,提供了诸如CSS选择器、支持Web标准、DOM操作、JSON、HTML5、Canvas、SVG等,同时也提供了处理文件I/O的操作,从而使你可以向操作系统读写文件等。PhantomJS的用处可谓非常广泛,诸如网络监测、网页截屏、无需浏览器的 Web 测试、页面访问自动化等。   PhantomJS官方地址:http://phantomjs.org/。   PhantomJS官方API:http://phantomjs.org/api/。   PhantomJS官方示例:http://phantomjs.org/examples/。   PhantomJS GitHub:https://github.com/ariya/phantomjs/。   2、PhantomJS下载与安装   官方下载地址:http:/

爬虫(一)request模块的使用

爱⌒轻易说出口 提交于 2020-03-08 06:40:58
requests模块的学习 使用前 pip install request 发送get, post请求,获取响应 response = requests.get(url) response = requests.post(url, data = {请求体的字典}) response的方法 response.text – 往往出现乱码,出现乱码时在前面加一句:response.encoding = “utf-8” response.content.decode() – 把响应的二进制流转化为str类型 response.request.url #发送请求的URL地址 response.url #response响应的URL地址 response.request.headers #请求头 response.headers #响应请求 获取网页源码的正确方式 (依次尝试以下三种方法,一定有一个可以正确获取解码后的字符串) response.content.decode() response.content.decode(“gbk”) response.text 发送header请求 为了模拟浏览器,不被服务器阻拦,获取和浏览器一模一样的内容 headers = { "User-Agent" : "Mozilla/5.0 (Windows NT 10.0; Win64; x64)

thinkphp分页bug--解决thinkphp分页乱码问题

只愿长相守 提交于 2020-03-08 02:16:12
thinkphp自带的分页类存在bug,例如当我们搜索关键词时,关键词为中文,第二次点击分页的时候,就会乱码,不能正常的显示我们需要的页码。本文就这一问题给出解决方案。 出现乱码的问题是因为thinkphp分页类中的,构造url时存在的问题,thinkphp的分页url是使用"/"来分隔参数的,在将数据传递到url中时,经过url加密,第二次传递的时候就会乱码了,而如果我们使用"?"和"&"来分隔参数的话,就不会出现这个问题了。 所以要修改的内容是thinkphp的分页类文件:/ThinkPHP/Extend/Library/ORG/Util/Page.class.php文件。 具体修改的代码是: 1、在thinkphp分页类文件Page.class.php的最后加上一个自定义函数,用于替换url中的参数分隔符号,函数内容如下: private function clin_page_url($parameter){ $url = U(''); $url = str_replace('.html', '?', $url); foreach ($parameter as $key => $value) { $url .= $key.'='.$value.'&'; } $url = substr($url, 0,-1); return $url; } 2、修改最终生成的url 在Page

想看美女图片?请用Python实现!

白昼怎懂夜的黑 提交于 2020-03-08 01:43:48
目的:   寂寞的夜晚总需要精神依托,用Python滋润疲惫的身心!!! 效果:    实现类 1 from Common import Common 2 import requests 3 4 class Get_mn(Common): 5 """ 6 title:Python爬取成人网站图片Demo 7 time:2020/03/08 00:54 8 """ 9 def mb(self): 10 url = 'https://www.449mk.com/pic/5/2020-01-10/25477.html' 11 #创建打开Chrome()对象,访问url 12 self.open_url(url) 13 #获取图片标题 14 img_title = self.get_text("xpath",'/html/body/div[8]/div/div[1]') 15 #获取图片列表 16 img_list = self.locateElement("xpath_s",'/html/body/div[8]/div/div[3]/p[*]/img') 17 for index, item in enumerate(img_list): 18 # 获取列表src属性中的href属性 19 item_href = item.get_attribute("src") 20 #