http请求

编写REST API

心不动则不痛 提交于 2019-12-07 06:35:43
REST API规范 编写REST API,实际上就是编写处理HTTP请求的async函数,不过,REST请求和普通的HTTP请求有几个特殊的地方: REST请求仍然是标准的HTTP请求,但是,除了GET请求外,POST、PUT等请求的body是JSON数据格式,请求的 Content-Type 为 application/json ; REST响应返回的结果是JSON数据格式,因此,响应的 Content-Type 也是 application/json 。 REST规范定义了资源的通用访问格式,虽然它不是一个强制要求,但遵守该规范可以让人易于理解。 例如,商品Product就是一种资源。获取所有Product的URL如下: GET /api/products 而获取某个指定的Product,例如,id为 123 的Product,其URL如下: GET /api/products/123 新建一个Product使用POST请求,JSON数据包含在body中,URL如下: POST /api/products 更新一个Product使用PUT请求,例如,更新id为 123 的Product,其URL如下: PUT /api/products/123 删除一个Product使用DELETE请求,例如,删除id为 123 的Product,其URL如下: DELETE /api

ApacheBench压测 那点事儿

心不动则不痛 提交于 2019-12-07 04:13:44
摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢! “我总是希望自己不要过于草率地去批评一个人” -《傲慢与偏见》 写代码,到处是指标和数据的。在写完接口,为了保证代码在一定压力下没问题,我们需要对接口进行压测。比如写完一模块的RestAPI,就需要用Web压测工具进行压测。压测工具有很多,新潮的getling,还有Old版的ApacheBench压测。 一、 什么是ApacheBench(AB)? "ApacheBench (ab) is a single-threaded command line computerprogram for measuring the performance of HTTP web servers." AB是一个测试HTTP WEB服务器性能的单线程命令程序。实战才是真理,但需要学会怎么使用AB命令。 二、 AB命令参数 通过简单的指令 ab -h ,就可以得到AB命令参数列表。如下: ab -h Usage: ab [options] [http[s]://]hostname[:port]/path Options are: -n requests Number of requests to perform -c concurrency Number of multiple requests

网站的最大并发连接数与状态详解

南楼画角 提交于 2019-12-07 00:32:32
最近我们网站常常报503错误:“ HTTP Error 503. The service is unavailable ”。但刷一两下又正常,估计很可能是超过网站的最大并发连接数了。 HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展。目前在WWW中使用的是HTTP/1.0的第六版,HTTP/1.1的规范化工作正在进行之中,而且HTTP-NG(Next Generation of HTTP)的建议已经提出。 HTTP协议的主要特点可概括如下: 1.支持客户/服务器模式。 2.简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。 3.灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。 4.无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。 5.无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传

JavaWeb(六):会话与状态管理

爱⌒轻易说出口 提交于 2019-12-06 22:51:31
HTTP协议是一种无状态的协议,WEB服务器本身不能识别出哪些请求是同一个浏览器发出的 ,浏览器的每一次请求都是完全孤立的。即使 HTTP1.1 支持持续连接,但当用户有一段时间没有提交请求,连接也会关闭。怎么才能实现网上商店中的购物车呢:某个用户从网站的登录页面登入后,再进入购物页面购物时,负责处理购物请求的服务器程序必须知道处理上一次请求的程序所得到的用户信息。 作为 web 服务器,必须能够采用一种机制来唯一地标识一个用户,同时记录该用户的状态。 WEB应用中的 会话 是指一个客户端浏览器与WEB服务器之间连续发生的一系列请求和响应过程。WEB应用的 会话状态 是指WEB服务器与浏览器在会话过程中产生的状态信息,借助会话状态,WEB服务器能够把属于同一会话中的一系列的请求和响应过程关联起来。 WEB服务器端程序要能从大量的请求消息中区分出哪些请求消息属于同一个会话,即能识别出来自同一个浏览器的访问请求,这需要浏览器对其发出的每个请求消息都进行标识:属于同一个会话中的请求消息都附带同样的标识号,而属于不同会话的请求消息总是附带不同的标识号,这个标识号就称之为会话ID(SessionID)。 在 Servlet 规范中,常用以下两种机制完成会话跟踪 Cookie Session 一、Cookie cookie机制采用的是在客户端保持 HTTP 状态信息的方案

TCP/IP协议栈概述及各层包头分析

邮差的信 提交于 2019-12-06 19:39:36
一、摘要   对之前几篇博文涉及到的网络通信协议进行分析,概述出TCP/IP的协议栈模型,最后根据实例对各层包头进行分析。 二、标准TCP/IP协议栈模型   标准TCP/IP协议是用于计算机通信的一组协议,通常被称为TCP/IP协议栈,以它为基础组建的互联网是目前国际上规模最大的计算机网络。正因为互联网的广泛应用,使得TCP/IP成为了事实上的网络标准。 1、OSI模型和TCP/IP协议模型   图1是OSI模型和TCP/IP协议模型的对比。 图1 OSI模型和TCP/IP协议模型 2、TCP/IP协议模型分层 (1)网络接口层   TCP/IP协议模型的基层,负责数据帧的发送和接收。对应OSI模型中的物理层和数据链路层,是TCP/IP的最底层,不过通常在描述TCP/IP模型时还是会划分具体为物理层(PHY)和数据链路层(MAC)。 (2)网络层   通过互联协议将数据包封装成互联网数据包,并运行必要的路由算法。这里有4种互联协议。   (a)网际协议IP:负责在主机和网络之间的路径寻址和数据包路由。   (b)地址解析协议ARP:获得同一物理网络中的主机硬件地址。   (c)网际控制消息协议ICMP:发送消息,并报告有关数据包的传送错误。   (d)互联组管理协议IGMP:用来实现本地多路广播路由器报告。 (3)传输层   传输协议在主机之间提供通信会话

python 爬虫(三)cookie和session + 爬虫中使用cookie或session实现登录 + 代理的设置(解决ip被封问题)

血红的双手。 提交于 2019-12-06 18:33:36
文章目录 一、cookie和session 1.产生的缘由 2.cookie和session存放位置 3. cookie ① cookie定义 ② cookie的分类 ③ cookie的组成(属性) ④ cookie被用户禁用,如何使用session? ⑤ 常见误区 4. session ① session的由来 ② session的定义 ③ session流程 ④ session失效时间 5. session和cookie的区别 二、使用cookie或session登录 1. 爬虫中登录的实现方法 2. 使用cookie登录的两种方法 ① 直接放在headers头部中 ② 使用requests插入Cookie 3. 使用session登录 三、代理的设置 1. 代理的基本原理 2. 代理的作用 3. 代理的分类 ① 根据协议来区分 ② 根据匿名程度来区分 ③ 在requests中如何设置代理 一、cookie和session 1.产生的缘由 Http有个特点,即无状态。Http无状态是指Http协议对事务处理没有记忆能力,当我们向服务器发送请求后,服务器处理请求之后返回结果。这是一个独立的过程,再次向服务器发出请求,服务器做出响应又是一次独立的过程,服务器不会记录前后状态变化。因此,服务器并不知道收到的两次请求是否来自同一个用户。这种效果并不是我们想要的。为了保持前后的状态

Go实现 爬虫v0.2

家住魔仙堡 提交于 2019-12-06 17:04:25
原址 在之前上一版本中,我们通过最简单的 Get 请求获取了网页地址,并解析出图片地址,然后再通过 Get 请求获取了图片内容。接下来的问题是,对于有登陆限制的网页,登陆之前是看不到相关信息的,那么对于这一类网页该如何处理呢? 1. HTTP 请求与响应的格式 参见 这篇文章 ,我们知道,在浏览器发出 Get 或 Post 请求时,请求的格式大致如下: < request-line > < headers > < blank line > [ < request-body > ] 浏览器在我们访问网页时会自动构造相关请求内容,在 chrome 中 F12 过后看到的视图下,选择 Network 标签并选择下方的 Headers 标签,然后刷新网页,随意选择 Headers 标签左边 Name 栏下的任一元素(一般选第一个)便可看到浏览器发送与接收消息时,消息的 Header 中的内容,如下图: 微博截图 我们需要用到的就是最下面红色标注的 Request Headers 部分的内容 —— 即 cookie 字段 Request Headers 图中的 cookie 即网站存储在浏览器中的 cookie 值,我们将该 cookie 值复制出来,粘贴在我们下一步将要在代码中构造的 Request Header 头中,网站就会认为我们已经登录过了。 2. Go net/http 包

2019-12-5笔试题

陌路散爱 提交于 2019-12-06 15:32:15
1:排序有几种方法?用js实现快速排序 排序方法:冒泡,选择,快排,二分法,堆排, 2:js实现ajax的异步请求过程 1 创建XMLHttpRequest对象 <script language = "javascript" type = "text/javascript"> var xmlHttpRequest; //定义一个变量,用于存放XMLHttpRequest对象 function createXMLHttpRequest(){//创建XMLHttpRequest对象的方法if(window.ActiveXObject){//判断是否是IE浏览器 xmlHttpRequest = new ActiveXObject("Microsoft.XMLHTTP"); //创建IE浏览器中的XMLHttpRequest对象 } else if(window.XMLHttpRequest){//判断是否是Netscape等其他支持XMLHttpRequest组件的浏览器   xmlHttpRequest = new XMLHttpRequest(); //创建其他浏览器上的XMLHttpRequest对象 }     }     createXMLHttpRequst(); //调用创建对象的方法 </script> 2 创建http请求   XMLHttpRequest.open

Flask框架入门(一)

大憨熊 提交于 2019-12-06 14:53:17
  Flask诞生于2010年,是Armin ronacher(人名)用 Python 语言基于 Werkzeug 工具箱编写的轻量级Web开发框架。   Flask 本身相当于一个内核,其他几乎所有的功能都要用到扩展(邮件扩展Flask-Mail,用户认证Flask-Login,数据库Flask-SQLAlchemy),都需要用第三方的扩展来实现。比如可以用 Flask 扩展加入ORM、窗体验证工具,文件上传、身份验证等。Flask 没有默认使用的数据库,你可以选择 MySQL,也可以用 NoSQL。其 WSGI 工具箱采用 Werkzeug(路由模块),模板引擎则使用 Jinja2。这两个也是 Flask 框架的核心。 准备 mkvirtualenv flask_demo -p python3 安装 pip install flask==0.12.4 一 .创建Flask项目 Flask不同于Django,不会提供任何自动的操作,所以需要手动创建项目目录,需要手动创建启动项目的管理文件 例如,创建项目目录flaskdemo,在目录中创建manage.py。在pycharm中打开项目并指定上面创建的虚拟环境 1 form flask import Flask 2 app = Flask(__name__) 3 4 @app.route('/') 5 def index(): 6

REST模式中HTTP请求方法

帅比萌擦擦* 提交于 2019-12-06 14:30:24
一直在测试REST模式的WEB SERVICE接口,客户端的HTTP的请求方式一般分为四种:GET、POST、PUT、DELETE,这四种请求方式有什么不同呢。简单的说,GET就是获取资源,POST就是创建资源,PUT就是更新资源,DELETE就是删除资源。具体来说:   PUT:PUT请求是向服务器端发送数据的,从而改变信息,该请求就像数据库的update操作一样,用来修改数据的内容,但是不会增加数据的种类等,也就是说无论进行多少次PUT操作,资源不会增加。   DELETE:DELETE请求顾名思义,就是用来删除某一个资源的,该请求就像数据库的delete操作。   GET:GET操作是安全的。所谓安全是指不管进行多少次操作,资源的状态都不会改变,GET只是访问和查看资源。   POST:操作不是安全的,每次请求都会创建资源,当我们多次发出POST请求后,其结果是创建出了多个资源。还有一点需要注意的就是,创建操作可以使用POST,也可以使用PUT,区别在于POST 是作用在一个集合资源之上的(/uri),而PUT操作是作用在一个具体资源之上的(/uri/xxx),再通俗点说,如果URL可以在客户端确定,那么就使用PUT,如果是在服务端确定,那么就使用POST,比如说很多资源使用数据库自增主键作为标识信息,而创建的资源的标识信息到底是什么只能由服务端提供