response

接口自动化测试,完整入门篇

雨燕双飞 提交于 2020-03-18 17:39:45
接口自动化完整入门篇: https://www.cnblogs.com/lovesoo/p/7845731.html 接口自动化脚本 # encoding: utf-8 import sys import os reload(sys) sys.setdefaultencoding("utf-8") import requests import json from datetime import datetime as dt import smtplib from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart from functools import partial from nose.tools import * def send_mail(): # 读取测试报告内容 with open(report_file, 'r') as f: content = f.read().decode('utf-8') msg = MIMEMultipart('mixed') # 添加邮件内容 msg_html = MIMEText(content, 'html', 'utf-8') msg.attach(msg_html) # 添加附件 msg_attachment =

charles工具使用,可用于抓取socket信息

那年仲夏 提交于 2020-03-18 17:33:10
3 月,跳不动了?>>> charles工具使用 charles除了之前介绍过模拟弱网的功能外,还有很多强大的功能。最近客户端测试用到的功能介绍如下: 一.准备工作 1.手机设置代理 charles设置代理端口号8888:Proxy→ Proxy Settings 手机设置代理,连接wifi,点开设置http代理,选择手动,服务器填写charles所在本机的ip地址,端口号8888 2.SSL代理设置,允许抓取https协议 Proxy→SSL Proxying Settings→勾取Enable SSL Proxying→add→添加想要抓取的域名和端口号,以抓取阿波罗app数据为例 二.拦截某个软件的接口数据 手机代理到电脑,charles会出现弹窗,询问allow还是deny,选择allow,连接成功。 通常情况下,我们需要对网络请求进行过滤,只监控向指定目录服务器上发送的请求。 在Charles的菜单栏选择"Proxy"->"Recording Settings",然后选择Include栏,选择添加一个项目,然后填入需要监控的协议,主机地址,端口号。这样就可以只截取目标网站的封包了。如下图截取阿波罗app数据: 如果只测试一个功能的情况下,可以只截取单个接口,例如测试阿波罗首页广告,只需截取splash接口,添加并勾选。 勾选Proxy →Start Recording

从开发者(Java)角度理解Request和Response

最后都变了- 提交于 2020-03-18 17:31:01
3 月,跳不动了?>>> 背景知识: 超文本传输协议 (HTTP-Hypertext transfer protocol) : 一种详细规定了浏览器和万维网服务器之间互相通信的规则,通过因特网传送万维网文档的数据传送协议。 七层网络协议: 应用层协议包括: HTTP 、FTP、Telnet、SMTP、RIP、NFS、DNS;TCP/UDP协议属于传输层协议;IP协议属于网际层。 深入理解一方面知识之前最好能够理清知识的结构,然后再对症寻医。 正文: 从开发角度上,我们主要从“七层网络协议”中应用层协议的“ HTTP 协议”入手去了解“请求”和“响应”,从而屏蔽再往下的细节,并为更上层的开发奠定知识理论基础。这里的请求和响应就是我们常常说到的Request和Response。 HTTP内容很多,本文只挑选所能用来解释本话题的相关知识(也就是说包括但并不仅限于,更详细戳这里 《HTTP权威指南》 ),废话太多了。 一次请求 是什么东西?教材上往往会给出很多内容:请求行、消息报头、请求正文,每部分内容中又可以细分很多Key-Value。具体是什么,可以用Firefox下的HttpFox扩展组件看个究竟。(Web开发推荐使用Firefox,当然也有人很喜欢Chrome),如图(一次访问百度首页的相关细节): 从该组件中,我们可以清楚看到一次URL访问(请求www.baidu

ajax跨域问题解决

微笑、不失礼 提交于 2020-03-18 16:53:32
某厂面试归来,发现自己落伍了!>>> 在项目中新建 global.asmx 全局配置文件并添加如下代码即可: 参考代码,放在global.asax中 protected virtual void ApplicationBeginRequest(Object sender, EventArgs e) { #region Cross Domain Service //以下代码提供跨域服务(包括“简单跨域”与“复杂跨域”,Web.config中不用再做设置) HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "*");//简单跨域 if (HttpContext.Current.Request.HttpMethod == "OPTIONS") { HttpContext.Current.Response.AddHeader("Access-Control-Allow-Methods", "POST,GET,OPTIONS,PUT,DELETE"); HttpContext.Current.Response.AddHeader("Access-Control-Allow-Headers", "*"); HttpContext.Current.Response.End(); } #endregion }

HTTP Request header

此生再无相见时 提交于 2020-03-18 11:54:16
某厂面试归来,发现自己落伍了!>>> HTTP Request header 当今web程序的开发技术真是百家争鸣,ASP.NET, PHP, JSP,Perl, AJAX 等等。 无论Web技术在未来如何发展,理解Web程序之间通信的基本协议相当重要, 因为它让我们理解了Web应用程序的内部工作. 本文将对HTTP协议进行详细的实例讲解,内容较多,希望大家耐心看。也希望对大家的开发工作或者测试工作有所帮助。使用Fiddler工具非常方便地捕获HTTP Request和HTTP Response, 关于Fiddler工具的用法,请看我另一篇博客[ Fiddler 教程 ] 阅读目录 什么是HTTP协议 协议是指计算机通信网络中两台计算机之间进行通信所必须共同遵守的规定或规则,超文本传输协议(HTTP)是一种通信协议,它允许将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器 目前我们使用的是HTTP/1.1 版本 Web服务器,浏览器,代理服务器 当我们打开浏览器,在地址栏中输入URL,然后我们就看到了网页。 原理是怎样的呢? 实际上我们输入URL后,我们的浏览器给Web服务器发送了一个Request, Web服务器接到Request后进行处理,生成相应的Response,然后发送给浏览器, 浏览器解析Response中的HTML,这样我们就看到了网页,过程如下图所示

How to receive a ajax response from a codeigniter controller?

时光总嘲笑我的痴心妄想 提交于 2020-03-18 08:56:47
问题 I have a controller that send the data to the model and the model insert this data in the mysql. I want to know the last ID of the row inserted, but I want this ID in my ajax function to use to uptade the table with the information. Here what I have: The model: public function add($nome, $documento) { $dados = array ( 'nome' => $nome, 'documento' => $documento ); $this->db->insert('clientes', $dados); return $this->db->insert_id(); } The Controller: public function add() { // validar $nome =

【Django】Cookie与Session

不问归期 提交于 2020-03-18 07:24:59
cookie与session 会话跟踪技术 在一个会话的多个请求中共享数据,比如: - 请求银行主页; - 请求登录(请求参数是用户名和密码); - 请求转账(请求参数与转账相关的数据); - 请求信誉卡还款(请求参数与还款相关的数据) 在这上会话中当前用户信息必须在这个会话中共享的 Cookie Cookie规范 Cookie大小上限为4KB; 一个服务器最多在客户端浏览器上保存20个Cookie; 一个浏览器最多保存300个Cookie; Cookie与HTTP头 Cookie是通过HTTP请求和响应头在客户端和服务器端之间传递的: Cookie:请求头,客户端发送给服务器端; 格式:Cookie: a=A; b=B; c=C。即多个Cookie用分号离开; Set-Cookie:响应头,服务器端发送给客户端; 一个Cookie对象一个Set-Cookie: Set-Cookie: a=A Set-Cookie: b=B Set-Cookie: c=C Cookie的覆盖 如果服务器端发送重复的Cookie那么会覆盖原有的Cookie,例如客户端的第一个请求服务器端发送的Cookie是:Set-Cookie: a=A;第二请求服务器端发送的是:Set-Cookie: a=AA,那么客户端只留下一个Cookie,即:a=AA。 django中的cookie语法 设置cookie:

分析Ajax爬取今日头条街拍

瘦欲@ 提交于 2020-03-18 07:05:28
分析Ajax爬取今日头条街拍 站点分析 源码及遇到的问题 代码结构 方法定义 需要的常量 关于在代码中遇到的问题 01. 数据库连接 02.今日头条的反爬虫机制 03. json解码遇到的问题 04. 关于response.text和response.content的区别 源代码 站点分析 首先,打开头条,在搜索框输入关键字之后,在返回的页面中,勾选Perserve log,这玩意儿在页面发生变化的时候,不会清除之前的交互信息. 在返回的response中,我们看不到常见的HTML代码,所以初步判定,这个网站是通过ajax动态加载的. pic-1581682361199.png 切换到XHR过滤器,进一步查看. pic-1581682361200.png 发现随着网页的滚动,会产生类似这样的的Ajax请求出来. 仔细查看内容,可以看到与网页中条目对应的title和article_url. 所以初步思路,通过article_url字段先抓取文章条目 分析json数据,可以看到,这里有 article_url ,另外,这次要抓取的是图集形式的页面,所以要注意下这个 has_gallery 然后我们再来看具体的页面 在具体页面的html中,我们发现,图片的所有链接直接在网页源代码中包含了,所以,我们直接拿到源码,正则匹配一下就好了. pic-1581682361200.png 至此

POST请求||带参数的POST请求

。_饼干妹妹 提交于 2020-03-17 22:48:32
POST请求 HttpPostTest.java package cn.itcast.crawler.test; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.util.EntityUtils; import java.io.IOException; public class HttpPostTest { public static void main(String[] args) { //创建HttpClient对象 CloseableHttpClient httpClient = HttpClients.createDefault(); //创建HttpPost对象,设置url访问地址 HttpPost httpPost = new HttpPost("http:/

4.后台项目配置

我与影子孤独终老i 提交于 2020-03-17 22:01:38
环境变量 dev.py # 环境变量操作:小luffyapiBASE_DIR与apps文件夹都要添加到环境变量 import sys sys.path.insert(0, BASE_DIR) APPS_DIR = os.path.join(BASE_DIR, 'apps') sys.path.insert(1, APPS_DIR) 在写项目直接导入utils文件夹也不''错误提示'' 封装logger dev.py # 真实项目上线后,日志文件打印级别不能过低,因为一次日志记录就是一次文件io操作 LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'formatters': { 'verbose': { 'format': '%(levelname)s %(asctime)s %(module)s %(lineno)d %(message)s' }, 'simple': { 'format': '%(levelname)s %(module)s %(lineno)d %(message)s' }, }, 'filters': { 'require_debug_true': { '()': 'django.utils.log.RequireDebugTrue', }, }, 'handlers': {