使用python get post数据 http https

news2025/4/22 0:45:57

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'] = num
	datas = 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 unmodified
    saveUninitialized: false,// don't create session until something stored
    cookie: {
        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-8

import http.client, urllib.parse
import http.client, urllib.parse
import random

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)",
    "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 = 1
    len2 = len(records)  
    sum = 0.0
    for i in range(len1,len2-1):
        sum += math.pow(records[i] - records[i-1],2)
        #sum += t*t
    return 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) # 转换为json
    response = 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.coloradmin.cn/o/743525.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C#轻松读写NDEF智能海报

NDEF 全称 NFC data exchange format 即 nfc 数据交换格式,是一种标准化的数据格式,可用于在任何兼容的NFC设备与另一个NFC设备或标签之间交换信息。数据格式由NDEF消息和NDEF记录组成。 NDEF信息可以写到不同类型的NFC芯片中,如Ntag系列芯片…

Python算法笔记(1)-时间复杂度、空间复杂度

Python算法笔记(1)-时间复杂度 1.时间复杂度 时间复杂度是一个描述算法的运行时间的一个函数,它描述了算法的运行时间和输入数据的规模之间的关系,时间复杂度的表示方法用O表示,时间复杂度也用来考察输入值无限趋近无…

【嵌入式Qt开发入门】Qt如何使用多线程——继承QObject的线程

QObject 在上篇已经说过,继承 QThread 类是创建线程的一种方法,另一种就是继承 QObject 类。继承 QObject 类更加灵活。它通过 QObject::moveToThread()方法,将一个 QObeject 的类转移到一个线程里执行,可以通过下图理解。 通过…

注解和反射02(Java)

反射机制 首先需了解静态语言和动态语言。 动态语言是一类在运行时可以改变其结构的语言:例如新的函数、对象、甚至代码可以被引进,已有的函数可以被删除或是其他结构上的变化。通俗点说就是在运行时代码可以根据某些条件改变自身结构。主要动态语言&a…

一文解析Arm64 栈回溯

AArch64栈的结构 Arm64有4种栈,分别是空增栈(Empty Ascendant Stack,EA)、空减栈(Empty Descendant Stack,ED)、满增栈(Full Ascendant Stack,FA)、满减栈(Full Descendant Stack,FD)。常用的是满减栈,Linux内核也使用满减栈。 下图是一个满减栈的示意…

AppSpider Pro 7.4.053 for Windows - Web 应用程序安全测试

AppSpider Pro 7.4.053 for Windows - Web 应用程序安全测试 Rapid7 Dynamic Application Security Testing (DAST) 请访问原文链接:https://sysin.org/blog/appspider/,查看最新版。原创作品,转载请保留出处。 作者主页:sysin…

分板机视觉定位切割软硬件方案

【检测目的】 定位切割 【拍摄效果图一】 【拍摄效果图二】 【拍摄效果图三】 【方案评估】 以目前样品进行实验来看,图像效果明显,可以找到中线位置。 视野:44mm*33mm 视觉精度:44mm/2448pixel0.018mm/pixel。 【硬件配置】…

抖音seo源码.视频剪辑功能开发(一)

一、短视频抖音seo账号矩阵系统 批量剪辑功能的开发一般有以下几种方式 1. 前端实现:通过前端技术,利用vue jquery layui JavaScript,等语言,实现一个可视化的编辑器,用户可以批量上传视频文件,设置剪…

uniapp-日历控件

第一步:打开uniapp的插件市场 网址:日历组件可选择周与月标记打卡支持左右切换 - DCloud 插件市场 第二步:导入相应的项目,会有相应的提示(路径) 第三步:引入对应的位置-例如我引入的位置 imp…

fastadmin视图渲染

基类app\common\controller\Backend会默认渲染以下几个对象到视图中 //渲染站点配置 $this->assign(site, $site); //渲染配置信息 $this->assign(config, $config); //渲染权限对象 $this->assign(auth, $this->auth); //渲染管理员对象 $this->assign(admin,…

ArcGISPro加载在线底图和影像

经常用ArcGIS都知道,在工作中配合在线地图有点多爽。无论是制图还是数据校核都非常方便。之前已经讲过如何在ArcGIS地图里利用simplegis插件加载多种在线地图,那换成pro咋办嘞 今天我们就来说说如何在ArcGIS Pro里加载在线地图 ArcGISPro本身就自带了两种影像,均是源自谷歌…

《Redis 核心技术与实战》课程学习笔记(八)

String 类型为什么不好用了? String 类型可以保存二进制字节流,只要把数据转成二进制字节数组,就可以保存了。String 类型并不是适用于所有场合的,它有一个明显的短板,就是它保存数据时所消耗的内存空间较多。 为什么…

不平衡电网条件下基于变频器DG操作的多目标优化研究(Matlab代码Simulink实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

贪心算法、贪心搜索/采样(greedy search/sampling)、集束搜索(beam search)、随机采样(random sample)

首先需要了解贪心算法: 贪心算法,又名贪婪法,是寻找最优解问题的常用方法,这种方法模式一般将求解过程分成若干个步骤,但每个步骤都应用贪心原则,选取当前状态下最好/最优的选择(局部最有利的选…

Tenable Nessus 10.5.3 (Unix, Linux, Windows) - #1 漏洞评估解决方案

Tenable Nessus 10.5.3 (Unix, Linux, Windows) - #1 漏洞评估解决方案 发布 Nessus 试用版自动化安装程序,支持 macOS Ventura、RHEL 9 和 Ubuntu 22.04 请访问原文链接:https://sysin.org/blog/nessus-10/,查看最新版。原创作品&#xff…

开源堡垒机Guacamole二次开发记录之二

这篇主要记录录屏和SFTP的实现。 录屏及视频播放 对于录屏及录屏的播放,因为我们的项目中需要把guacd和java后端分开两台服务器部署,而guacamole的录屏是通过guacd程序录制的。我的要求是在Java后端直接把录好的视频文件通过http前端播放,因…

手机外壳缺陷视觉检测软硬件方案

单独使用一种光源效果图 同轴光会出现亮度不够的情况;回形面光因为光源中间的圆孔会使图像有阴影,造成图像效果不均衡,所以不采用单独光源打光 使用同轴回形面光源效果图 回形光源照亮产品要寻找的边缘,同轴光源起到补光的作用&a…

裁剪opencv库到2Mb

摘要:本文描述了如何对opencv进行裁剪已达到最小化,不限于使用模块编译,去除第三方库依赖,改变编译选项,限制导出符号等。   关键字:opencv、导出符号 opencv库大小优化的文章网络上很少,大部…

【C++ 学习 ⑩】- 详解 string 类(下):string 类的模拟实现和写时拷贝

目录 一、string 类的模拟实现 1.1 - string.h 1.2 - test.cpp 二、string 类的写时拷贝 2.1 - 示例 2.2 - 原理 一、string 类的模拟实现 1.1 - string.h #pragma once#include <assert.h> #include <string.h> #include <iostream>namespace yzz {…

mac版android studio设置字体避坑总结

1.整体主题字体设置: setting->Appearance & Behavior->Appearance->Theme: 设置主题 Use custom font:右边的数字是设置除了编辑代码去之外的字体大小 ,推荐使用AppleSystemUIFont 注意这个字体有个bug,就是如果用在终端横向会有空格: 2.设置终端字体: setting-…