使用python get post数据 http https

0、目的

目的比较简单,测试,使用python来提交数据是非常简洁的,修改代码也容易,除了做人工智能,本身也是一个非常好的测试端工具

1、简单的post

一个简单的示例程序,将 headers 内容置为’application/json’,为了演示,每次修改提交数据number的值,向服务器程序的8000端口提交data,for 循环提交10次。

import json
import requests
import time
headers = {'Content-Type': 'application/json'}
data = {'name' : 'one screen','number' : 0,'reg' : 'test'
}
for num in range(1,10):data['number'] = numdatas = json.dumps(data)try:r = requests.post("http://127.0.0.1:8000/post/data", data=datas, headers=headers)print(r.text)except requests.exceptions.ConnectionError:print('connectionError')	time.sleep(1)

使用nodejs 写一段服务端代码,简单,直接用express,进行接收数据,nodejs同样是非常翻方便简单的

var express = require('express');
var cors = require('cors');
var app = express();//创建express实例
app.use(cors());//为了解决跨域问题
var http = require('http').Server(app);
//var httpget = require('http');
var bodyParser = require('body-parser');
app.use(bodyParser.json({limit: '1mb'}));  
app.use(bodyParser.urlencoded({            extended: true
}));
//var session = require('express-session');
/*
app.use(session({secret: 'secret',resave: true,// don't save session if unmodifiedsaveUninitialized: false,// don't create session until something storedcookie: {maxAge: 1000 * 60 * 10 //过期时间设置(单位毫秒)}
}));
*/
app.use(express.static(__dirname));app.post("/post/data",function(req,res){console.log(req.body);res.send("{ret:1}");
});app.get("/",function(req,res){res.send("{ret:ok}");});http.listen(8000, function () {console.log('listening on *:8000');
});

启动服务端程序,端口8000等待数据
在这里插入图片描述
在这里插入图片描述
客户端收到数据,打印返回,服务端收到数据打印内容,正常。

2、复杂一点的例子

修改一下headers

USER_AGENTS = ["Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; AcooBrowser; .NET CLR 1.1.4322; .NET CLR 2.0.50727)","Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; fr) Presto/2.9.168 Version/11.52",'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'
]headers = {'Referer': 'http://127.0.0.1:8000/','User-Agent': random.choice(USER_AGENTS ),'Accept-Language': 'zh-CN,zh;q=0.9',}

我们使用import http.client, urllib.parse,开始写get 和post 程序,以下为代码清单

#coding=utf-8import http.client, urllib.parse
import http.client, urllib.parse
import randomUSER_AGENTS = ["Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; AcooBrowser; .NET CLR 1.1.4322; .NET CLR 2.0.50727)","Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Acoo Browser; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506)","Mozilla/4.0 (compatible; MSIE 7.0; AOL 9.5; AOLBuild 4337.35; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)",
]def get_demo(num,keyword):page = urllib.parse.urlencode({'page':num})params = urllib.parse.urlencode({})headers = {'Referer': 'http://127.0.0.1:8000/','User-Agent': random.choice(USER_AGENTS ),'Accept-Language': 'zh-CN,zh;q=0.9',}conn = http.client.HTTPConnection("127.0.0.1",8000, timeout=10)conn.request("GET", "/test/"+str(num), params, headers)r1 = conn.getresponse()#print(r1.read())html = r1.read()data = html.decode('utf-8')  # This will return entire content.print(data)content = data.find(keyword)print(content)if content != -1:print('bingo:'+page)else:print('try {},status:{}'.format(page, r1.status))def post_demo():params = urllib.parse.urlencode({'page': 1, 'name': 'qianbo'})headers = {"Content-type": "application/x-www-form-urlencoded","Accept": "application/json"}#conn = http.client.HTTPSConnection("127.0.0.1",8000)conn = http.client.HTTPConnection("127.0.0.1",8000)conn.request("POST", "/post/data", params, headers)response = conn.getresponse()print(response.status, response.reason)if not response.closed:data = response.read()print(data, type(data.decode('utf-8')))conn.close()
def main():get_demo(1,"qianbo")post_demo()if __name__ == '__main__':main()

在main函数中分别调用get 和 post程序,并且打印结果,如果需要https, 我们只要将

 conn = http.client.HTTPConnection("127.0.0.1",8000) 改成conn = http.client.HTTPSConnection("127.0.0.1",8000) 

服务端的nodejs 代码修改一下,清单如下:

var express = require('express');
var cors = require('cors');
var app = express();//创建express实例
app.use(cors());//为了解决跨域问题
var http = require('http').Server(app);
//var httpget = require('http');
var bodyParser = require('body-parser');
app.use(bodyParser.json({limit: '1mb'}));  
app.use(bodyParser.urlencoded({            extended: true
}));app.use(express.static(__dirname));app.post("/post/data",function(req,res){console.log(req.body);res.send("{ret:1}");
});app.get("/",function(req,res){res.send("{ret:1,name:'qianbo'}");});app.get("/test/:page",function(req,res){var page = req.params.page;console.log("page is ",page);res.send("{ret:1,name:'qianbo'}");
});
http.listen(8000, function () {console.log('listening on *:8000');
});

其实就是增加了一个test/:page 接收,方便演示,运行后, 服务端和客户端的结果如下在这里插入图片描述

python非常方便,可以节省很多时间去关心自己的业务和逻辑
说道逻辑,下面我们开始写一段有关业务的代码,以便于更好的示例

3、业务融入

下面我们开始计算业务上的医学心率数据
定义均值和标准差数据函数


def get_average(records):"""平均值"""return sum(records) / len(records)
def get_standard_deviation(records):"""方差 反映一个数据集的离散程度标准差 == 均方差 反映一个数据集的离散程度"""average = get_average(records)print("average:",average)test = sum([(x - average) ** 2 for x in records]) / len(records)return math.sqrt(test)

定义差值均方,反应心率中的变化成为

def get_rmssd(records):"""差值均方得平方根,反应hrv中得变化成分"""len1 = 1len2 = len(records)  sum = 0.0for i in range(len1,len2-1):sum += math.pow(records[i] - records[i-1],2)#sum += t*treturn math.sqrt(sum / (len2-1))

定义post函数

def post2():str = json.dumps({'userid':1})print(str)headers = {"Content-type": "application/json","Accept": "text/plain"}conn = http.client.HTTPConnection("127.0.0.1",8000)conn.request('POST', "/hrv", str, headers)response = conn.getresponse()print(response.status, response.reason)data = response.read().decode('utf-8')print(data)conn.close()def post(datain):s = requests.session()#print(s.headers)headers1 = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:54.0) Gecko/20100101 Firefox/54.0','Content-Type': 'application/json'}#json = pd.DataFrame.to_json(datain)json1 = json.dumps(datain) # 转换为jsonresponse = s.post(url1,data=json1, headers=headers1,timeout=10)print(response)print(response.content)

使用python产生发送的数据,简单写一下,模拟业务数据产生

data = {'Id': 116,'Type':3,'Device':'B00007','Data':[]}
nowtime = time.mktime(time.localtime()) - 1000*60 *6 *60  # 往前推一个小时number = 6  #一分钟6个数据,一共60分钟 360个数据
for i in range(number): #x=np.append(x,)data['Data'].insert(0,{'heart':random.randint(70,90), 'Time':nowtime+i*166})d_calc = []
for i in range(10000):d_calc.append(60000/random.randint(70,100))res = get_standard_deviation(d_calc)
print(res)
res = get_rmssd(d_calc)
print(res)

后面就可以使用post 进行发送数据了,比较简单,不做运行了。感谢阅读。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/22288.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2023华为产品测评官-开发者之声 | 华为云CodeArts征文活动,多重好礼邀您发声!

"2023华为产品测评官-开发者之声"活动激发了众多开发者和技术爱好者的热情,他们纷纷递交了精心编写的产品测评报告。活动社群充满活力,参与者们热衷于交流讨论,互相帮助解决问题,一起探索云技术的无限可能。…

【机器人模拟-02】 模拟移动机器人设置里程计

一、说明 在本教程中,我将向您展示如何设置移动机器人的测程。本教程是“机器人模拟”指南中的第二个教程。测量位移是仿真中的重要内容,设置测程的官方教程在此页面上,但我将逐步引导您完成整个过程。 您可以在此处获取此项目的完整代码。让我们开始吧! 二、ROS 2 中的里程…

最火爆的大模型框架LangChain七大核心及案例剖析上(三)

最火爆的大模型框架LangChain七大核心及案例剖析上 10.6 GPT内容创建者案例详细剖析 我们回到“LangChain GPT内容创建者”案例,一行一行的解析代码,为了更好的看这个代码,先看一下它具体执行的整个日志过程,然后再看一下代码的部分。 首先,在控制台执行脚本,启动web页面…

微信小程序(二)

目录 1、input标签 一、表单绑定 1、数据绑定 2、输入获取 二、网络请求 1、介绍 2、注意 3、使用 4、基于Promise封装 三、自定义组件 1、创建 2、父向子组件通信 3、子向父组件通信 4、生命周期 四、vant weapp组件库 1、配置 2、使用 进入本章前的拓展&#…

用ChatGPT解析Wireshark抓取的数据包样例

用Wireshark抓取的数据包,常用于网络故障排查、分析和应用程序通信协议开发。其抓取的分组数据结果为底层数据,看起来比较困难,现在通过chatGPT大模型,可以将原始抓包信息数据提交给AI进行解析,本文即是进行尝试的样例…

河钢数字项目管理部负责人杨笑瑾受邀为第十二届中国PMO大会演讲嘉宾

河钢数字技术股份有限公司项目管理部负责人杨笑瑾女士受邀为由PMO评论主办的2023第十二届中国PMO大会演讲嘉宾,演讲议题:项目群管理赋能组织变革。大会将于8月12-13日在北京举办,敬请关注! 议题简要: 谈到组织变革自然…

DynaSLAM代码详解(5) — Tracking.cc跟踪线程

目录 5.1 DynaSLAM中Tracking线程简介 5 .2 RGBD模式下跟踪流程 5.3 DynaSLAM的低成本跟踪 (1) Tracking::LightTrack() 低成本跟踪函数 (2) Tracking::LightTrackWithMotionModel() 低成本的恒速模型跟踪流程 5.4 DynaSLAM的正常跟踪 文章着重将与ORB-SLAM2不同的地方&a…

SpringBoot2+Vue2实战(十八)修改密码

一、修改密码&#xff1a; Header.vue <el-dropdown-item style"font-size: 14px; padding: 5px 0"><router-link to"/password" style"text-decoration: none">修改密码</router-link></el-dropdown-item> router/i…

Kafka 深度剖析

1、应用场景 1.1 kafka场景 Kafka最初是由LinkedIn公司采用Scala语言开发&#xff0c;基于ZooKeeper&#xff0c;现在已经捐献给了Apache基金会。目前Kafka已经定位为一个分布式流式处理平台&#xff0c;它以 高吞吐、可持久化、可水平扩展、支持流处理等多种特性而被广泛应用…

牛客HJ99 - 自守数【暴力 + 换位取模】

原题传送门 原题描述 首先我们来看一下原题是怎么描述的&#xff0c;题面很简单&#xff0c;输入n&#xff0c;然后让我们去统计从1 ~ n之间的自守数有几个&#xff0c;那什么是【自守数】呢&#xff0c;上面也说到了&#xff0c;即一个数在平方之后该数的尾数等于该数自身的自…

ES6新特性基础总结

目录 简介 node.js安装 babel转码器 let命令 const命令 解构对象 字符串扩展 新增方法&#xff1a; 数组扩展 扩展运算符 伪数组 对象扩展 属性的简介表示法 属性名表达式 对象的扩展运算符 函数扩展 箭头函数 使用注意 Set数据结构 基本用法 size属性 特有方法 P…

用于分析脉冲类信号的二阶瞬态提取变换研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…