http请求

爬虫性能分析

回眸只為那壹抹淺笑 提交于 2019-12-26 00:41:08
对于爬虫,python进行并发抓取的实现方式主要有以下几种:进程,线程,协程。 性能的消耗主要在IO请求中,当单进程单线程模式下请求URL时必然会引起等待,从而使得请求整体变慢。 一 多进程执行 可以实现并发,但是,请求发送出去后和返回之前,中间时期进程空闲 编写方式: 1- 多进程直接返回处理 1 from concurrent.futures import ProcessPoolExecutor 2 import requests 3 import time 4 5 def task(url): 6 response = requests.get(url) 7 print(url,response) 8 # 写正则表达式 9 return response 10 11 pool = ProcessPoolExecutor(7) 12 url_list = [ 13 'http://www.cnblogs.com/wupeiqi', 14 'http://huaban.com/favorite/beauty/', 15 'http://www.bing.com', 16 'http://www.zhihu.com', 17 'http://www.sina.com', 18 'http://www.baidu.com', 19 'http://www.autohome.com

http报文

时光总嘲笑我的痴心妄想 提交于 2019-12-25 22:35:15
一、什么是报文 报文,是网络中交换和传输的数据单元,即站点一次性要发送的数据块。报文包含了将要发送的完整的 数据信息,其长短很不一致,长度不限且可变。HTTP报文是由一行一行简单的字符串组成的。HTTP报 文都是纯文本,不是二进制代码,所以人们可以很方便地对其进行读写。如果说HTTP是因特网的信使, 那么HTTP报文就是它用来搬东西的包裹了。 二、 HTTP报文的执行顺序:    一次HTTP请求,HTTP报文会从      “客户端” --------> "代理" ------------> "服务器"。    在服务器工作完成之后      "服务器" -----------> "代理" ---------------->"客户端" 三、报文的组成部分 HTTP报文是简单的格式化文本。如下图所示。每条报文都包含一条来自客户端的请求或者一条来自服务器的响应。 它们由三部分组成:对报文进行描述的起始行、包含属性的首部块以及可选的、包含数据的主体部分。 所有的HTTP报文都可以分为两类:请求报文和响应报文。请求报文会向Web服务器请求一个动作。响应报文会将请求 的结果返回给客户端。请求报文和响应报文的基本报文结构相同。 1、报文的语法 请求报文的格式: <method> <request-URL> <version> <headers> <entity-body> 响应报文的格式

Axios 中文说明

蹲街弑〆低调 提交于 2019-12-25 16:54:33
Axios 中文说明 Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中。 Features 从浏览器中创建 XMLHttpRequests 从 node.js 创建 http 请求 支持 Promise API 拦截请求和响应 转换请求数据和响应数据 取消请求 自动转换 JSON 数据 客户端支持防御 XSRF <script src=" https://unpkg.com/axios/dist/axios.min.js"></script&gt ; Example 执行 GET 请求 // 为给定 ID 的 user 创建请求 axios.get('/user?ID=12345') .then(function (response) { console.log(response); }) .catch(function (error) { console.log(error); }); // 可选地,上面的请求可以这样做 axios.get('/user', { params: { ID: 12345 } }) .then(function (response) { console.log(response); }) .catch(function (error) { console.log(error); }); 执行 POST

使用 docker 部署基于 selenium+chrome-headless的服务

混江龙づ霸主 提交于 2019-12-25 16:41:34
使用 docker 部署基于 selenium+chrome-headless的服务 1、编写 docker-compose 文件 bs-whatweb-chrome: image: selenium/standalone-chrome:latest # 使用官方镜像 ports: # 端口映射(后续可能没用) - 9999:4444 shm_size: 2g # docker 默认的共享内存只有 64M,当启动多个 Chrome 实例的时候可能会导致 Chrome 崩溃,所以需要增大/dev/shm的内存 2、基础配置 selenium 容器的 hostname 是 Chrome,所以需要修改COMMAND_EXECUTOR的 IP地址,修改如下: bs-whatweb-chrome 为项目中关于 selenium容器名字 # chromedriver_url COMMAND_EXECUTOR=http://bs-whatweb-chrome:4444/wd/hub 3、使用示例 from selenium import webdriver from selenium.webdriver.chrome.options import Options from selenium.webdriver.common.desired_capabilities import

Web阶段性技术文档(Cookie)

☆樱花仙子☆ 提交于 2019-12-25 13:15:05
一、基本概念的学习 1 、什么是Cookie Cookie 是 服务器保存在浏览器 的一小段 文本信息 。浏览器每次向服务器 发出请求 ,就会 自动附上 这段信息。 Cookie 就是这么简单,这就是 Web 开发里 Cookie 的含义。 2 、Cookie的作用 (1)Cookie 主要用来分辨两个请求是否来自同一个浏览器 (2)用来保存一些状态信息,例如: a. 对话(session)管理 :保存 登录、购物车 等需要记录的信息。 b.个性化:保存 用户的偏好 ,比如网页的 字体大小、背景色 等等。 c.追踪: 记录和分析用户行为 。 不推荐 使用Cookie作为客户端存储,原因: a.它的容量很小(4KB)。 b.缺乏数据操作接口。 c.而且会影响性能。 客户端储存应该使用 Web storage API 和 IndexedDB 。 (3)使用Cookie一般有 两个作用 。 第一个作用是 识别用户身份 。 比如用户A用浏览器访问了http://a.com,那么http://a.com的服务器就会立刻给 A 返回一段数据「uid=1」(这就是Cookie)。当 A 再次访问http://a.com的其他页面时,就会附带上「uid=1」这段数据。 同理,用户 B 用浏览器访问 http://a.com 时,http://a.com 发现 B 没有附带 uid 数据

《HTTP权威指南》1-HTTP概要

不打扰是莪最后的温柔 提交于 2019-12-25 07:29:28
Http HyperText Transfer Protocol,超文本协议 通过此协议,我们可以将遍布全世界的Web服务器上的 信息块 快速,便捷,可靠的搬移到我们自己桌面上的Web浏览器上。 这些信息块指的是什么呢? 我们平时看到的图片,电影,音频,文本,Html页面都包含在其中。 Web客户端和服务器 资源 Web服务器是Web资源的宿主 媒体类型 因特网上有数千种不同的数据类型,当Web浏览器从服务器取回一个对象时,需要知道其类型,以便知道如何处理这个对象。 于是Http为每种要通过Web传输的对象打上了 数据格式标签 ,名为 MIME (Multipurpose Internet Mail Extemsion)类型,MIME是一种文本标记,表示一种主要的对象类型和一个特定的子类型,中间由一条斜杠来分割。如: Html格式的文本文档的MIME为text/html JPEG图片的MIME为image/jpeg URI 每个Web服务器资源都有一个名字,服务器资源名称被称为统一资源标识符(Uniform Resource Indentifier,URI),URI有两种形式,分别是URL和URN。 URL 统一资源定位符(URL) URL的第一部分被称为方案(scheme),说明了访问资源所使用的协议类型。 第二部分给出了服务器的因特网地址 其余部分指定了Web服务器上的某个资源

关于前端的性能优化问题

余生颓废 提交于 2019-12-25 03:53:28
1. 减少http请求数 合并文件,通过把所有脚本置于一个脚本文件里或者把所有样式表放于一个样式表文件中,从而减少Http请求的数量。 CSS Sprites是减少图片请求的首选方案。把所有的背景图片合并到一张图中,使用CSS的background-image 和background-position 属性去控制展现恰当的图片区域。 内联图片使用data: URL scheme 把图片数据嵌入页面,但这会增加Html文档的大小。 2. 使用内容分布式网络 内容分布式网络(CDN)是一系列分布在不同地域的服务器的集合,能够更有效的给用户发送信息。它会根据一种衡量网域距离的方法,选取为某个用户发送数据的服务器。比如,到达用户最少跳或者最快相应速度的服务器会被选中。 3. 给头部添加一个失效期或者Cache-Control 对于静态组件:把头部的缓存期设为某个遥远的未来,使其能够“永不过期”。 对于动态组件:使用适当的Cache-Control头部帮助浏览器执行特定的请求。 4. Gzip压缩组件 在HTTP请求的头部中Accept-Encoding指定的压缩格式: ν Accept-Encoding: gzip, deflate ν Content-Encoding: gzip 5. 把样式表放在前面 把样式表挪到文档的头部可以让页面的加载显得更快

深入理解HTTP Session

五迷三道 提交于 2019-12-25 03:34:42
session在web开发中是一个非常重要的概念,这个概念很抽象,很难定义,也是最让人迷惑的一个名词,也是最多被滥用的名字之一,在不同的场合,session一次的含义也很不相同。这里只探讨HTTP Session。 为了说明问题,这里基于Java Servlet理解Session的概念与原理,这里所说Servlet已经涵盖了JSP技术,因为JSP最终也会被编译为Servlet,两者有着相同的本质。 在Java中,HTTP的Session对象用javax.servlet.http.HttpSession来表示。 1、概念:Session代表服务器与浏览器的一次会话过程,这个过程是连续的,也可以时断时续的。在Servlet中,session指的是HttpSession类的对象,这个概念到此结束了,也许会很模糊,但只有看完本文,才能真正有个深刻理解。 2、Session创建的时间是: 一个常见的误解是以为session在有客户端访问时就被创建,然而事实是直到某server端程序调用 HttpServletRequest.getSession(true)这样的语句时才被创建,注意如果JSP没有显示的使用 <% @page session=“false”%> 关闭session,则JSP文件在编译成Servlet时将会自动加上这样一条语句 HttpSession session =

Nginx与F5会话保持介绍

喜夏-厌秋 提交于 2019-12-25 01:00:19
Nginx是一个很高效稳定的软负载均衡器,最新的版本可以负载均衡HTTP(s),TCP,UDP等多种协议的链接。一般访问量比较大一点的Web站点都会用NGINX做HTTP协议的Web负载均衡,其后端一般是多个PHP或者JAVA中间件。另外NGINX还可以和Keepalived配合防止均衡器的单点故障,这一点要强于F5,A10这一类的硬件负载均衡设备。 但是F5,A10等硬件负载均衡器虽然价格昂贵但是仍然很有市场,其中原因之一就是硬件负载均衡器比Nginx配置简单,具备图形化界面,有图形化的实时监测界面(收费版的Nginx Plux也有这个功能,但是价格更加昂贵)。但是最重要的一点,就是硬件负载均衡器有成熟的会话保持措施,这一点是Nginx的弱点。 Session会话保持机制? 一般来说,我们在java中都通过如下代码进行用户登录后的服务端注册,并且在用户下次请求时无需再登陆一遍,这就是Servlet的Session。 HttpSession session = request.getSession(false); session.setAttribute("data", data); session.getAttribute("data"); 使用了这种Session策略,那么Web容器比如tomcat就为当前用户生成一个SessionID,并且以这个SessionID为索引

接口调用(发送http请求)

一世执手 提交于 2019-12-24 21:04:48
// 向对应的url地址发送http请求, 并获取响应的json字符串 public String getHttpResponse(String url) { // result用于接收连接响应的数据 String result = ""; // in用于读取URL的响应 BufferedReader in = null; try { URL realUrl = new URL(url); // 打开和URL之间的连接 URLConnection connection = realUrl.openConnection(); // 设置通用的请求属性 connection.setRequestProperty("accept", "*/*"); connection.setRequestProperty("connection", "Keep-Alive"); connection.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"); // 建立实际的连接 connection.connect(); // 定义 BufferedReader输入流来读取URL的响应 in = new BufferedReader(new InputStreamReader