python伪造浏览器请求头,python添加请求头和请求体
Request是一个对象,不管是Python还是Java,虽然可能用不同的名字调用(其他语言可能叫HttpRequest)。
当客户端浏览器访问www.baidu.com地址时,Http协议会将一个请求对象传递给服务器。这个请求对象包含请求头、请求参数和请求模式。当然后台可以得到请求。然后进行逻辑处理。
HTTP请求(request):
HTTP协议:
请求对象请求:
request请求对象封装了与请求相关的所有信息。
例如,请求消息头请求数据请求路径。
在Flask中,请求消息封装在请求对象中,可以直接引用:
从flask中的flask导入请求,请求对象是全局的,可以在任何地方使用。
第二,GET要求我们写一个接受个人信息的接口,也就是视图函数。让我们创建一个名为register.html的新模板,并在模板中编写以下表单:
操作:指明要提交的地址。方法:请求方法!DOCTYPE html lang= en head meta charset= UTF-8 title title/title/headbydyform action=/center/Add method= get username:input type= text name= name Age br Age:input type= text name= Age br hobby:eat input type= checkbox name= hobby value= eat drink input type= c Heckbox name= hobby value= drink play input type= checkbox name= name= name= name= hobby name value此时,您需要编写两个视图,一个用于显示注册页面,另一个用于处理前端传来的参数:
从flask导入Flask,request,Render _ template app=Flask(_ _ name _ _)@ app . route(/)#代表主页definitindex():# view函数return Render _ template( register . html )@ app . route(/Center/add )# DEF Center(), 表示个人中心页面:# view函数if request.method==GET: #请求模式为getname=request . args . GET( Name )# args取GET模式参数age=request . args . GET( Age )Hobby=request . args . getlist( Hobby )# GET list取一键多值参数return Name:% s Age:% s Hobbies:% s %(Name,Age,Hobby)app . config[ debug ]=true if _ _ Name _ _= _ _ main _ :# 0.
当我们单击提交时:
你可以看到我们已经收到了前端参数,并显示在浏览器上。
第三,POST request登录和注册都会使用Post request,没有人希望自己的一些敏感信息显示在浏览器的地址上。那我们就把刚才的列表改成Post请求吧。我们需要做的只是改变表单中的方法:
Method=post 有两个地方需要更改复制代码的背景:
请求的方法:默认是提前获取请求参数:将args改为form从flash导入flash,request,Render _ template app=flask(_ _ name _ _)@ app . route(/)#代表主页def index(): # view函数return Render _ template( register 2 . html )@ app . route(/center/add),methods=[GET , POST]) # DEF Center()支持get和POST请求:# view函数if request.method==GET: #请求模式为getname=request . Args . GET( name )# Args取GET模式参数age=request . Args . GET( age )hobby=request . Args . GET list( hobby )# GET list取一键多值参数return name:% s age:% s hobby:% s %(name,age, Hobby)elif request . method== post :Name=request . form . get( Name )# form取post模式参数age=request . form . get( Age )Hobby=request . form . getlist( Hobby )# getlist取一键多值参数return Name:% s Age:% s Hobbies:% s %(Name,Age,Hobby)app . config[ debug ]=true if _ _ Name _ _= _ _ main _ :# 0 . 0 . 0 . 0 . 0表示任何可以代表这台机器的地址都可以访问app。
你可以看到我们的后台已经收到了前端的参数,并显示在浏览器上。而且我们传递的参数没有拼接在浏览器地址上,有隐藏参数的好处。
如果是Pos mode T,我们完全可以把view功能合成一个:
前端:表单表单可以提交到当前地址,无需操作!DOCTYPE html lang= en head meta charset= UTF-8 title title/title/heady form method= post 用户名:输入类型=text name=namebr年龄:输入类型=text name=agebr爱好:吃输入类型= checkbox name= hobby value=吃喝输入T= checkbox name= hobby value=喝播放输入类型= checkbox name=爱好 value=播放音乐输入类型= checkbox name=从Flask导入Flask,request,render _ template app=Flask(_ _ name _ _)@ app . route(/register ,methods=[GET ,POST]) #支持GET, post请求def register(): # view函数if request.method==GET: #请求方法为GET返回render _ template( register . html )#返回模板elif request . method== post :Name=request . form . GET( Name )# form采用post模式参数age=request . form . GET( Age )Hobby=request . form . GET list( Hobby )# GET list采用一键多值参数返回 Name: %s Age: %s爱好:%s% (name,Age,Hobby) app.config [debug
四。上传文件上传文件也是我们经常使用的一个功能。前端上传一个文件,然后后端处理保存到服务器。这种类型的文件属于多媒体资源。Enctype=multipart/form-data 需要添加到前面的表单中。让我们创建一个名为upload.html的新模板,并在其中编写以下代码:
!DOCTYPE html lang= en head meta charset= UTF-8 title title/title/head body Form action= method= post enctype= multipart/Form-data 输入类型= file name= file 输入类型= submit value= up /Form/body/html复制代码。我们重新创建一个新的upload.py文件,并在该文件的目录中创建一个名为upload的文件夹来存放我们上传的图片:
upload.py文件中的代码如下:
from flask import Flask,request,render_template,redirect,URL _ for from werkzeug . utils import secure _ filename import OS from Flask import send _ from _ directory app=Flask(_ _ name _ _)UPLOAD _ FOLDER= UPLOAD allowed _ EXTENSIONS=set([ txt , pdf , png , jpg , jpeg ,GIF ])app . config[ UPLOAD _ FOLDER ]=UPLOAD _ FOLDER #确定上传的文件是否是允许的后缀defallowed _ file(文件名):return . 在filename和filename.r中拆分(., 1)[1].ALLOWED _ EXTENSIONS @ app . route(/upload ,methods=[GET , post ])def upload():ifrequest . method== get :# request方法是Get返回render _ Template( upload . html )# Template else:if file 不在request . files:return redirect(request . URL)file=request . files . Get( file )# Get file if file . filename== :return redirect(request . URL)if file和allowed _ file(file . filename):filename=secure _ filename(file . filename)#使用此函数确定文件名是否安全(注意:中文不能文件名))#保存文件返回重定向(url_for(show ,filename=Filename))# show pictures @ app . route(/show/Filename )def show(Filename):# Send _ from _ directory可以从目录中加载文件返回Send _ from _ directory(app . config[ upload _ folder ],Filename)如果_ _ name _ _= _ _ main _ _: # 0.0.0表示任何可以代表这台机器的地址都可以访问app.run (host= 0.0.0.0 ,port=5006,debug=true) 让我们在浏览器中访问它:
在您的电脑上选择一张图片,然后点按“上传”:
而且你也可以看到前端上传的图片已经保存在我们的上传文件夹里了。
在使用request的这些方法和属性时,最好调用get()方法,否则程序在无法获取内容时会报错,get()在无法获取时可以返回null None。
1) request.args这是用来获取具体内容的,使用字典获取。例如,如果前端为输入标签设置了一个id值,您可以使用此方法直接获取id的内容。(2) request.form这是专门用来获取表单数据的。比如前面表单中填写了用户名和密码,就可以用这个方法获取内容。(3) request.method这个用来具体获取客户端的请求方法,默认是一个GET请求。比如前端已经设置了post请求方法和get请求方法,有一个表单要提交,就需要用这个方法获取用户的请求方法是什么,然后根据请求方法处理(4)request . referer。这用于获取用户在请求之前所在的url。例如,如果用户从网站的一个页面跳转到另一个页面,他可能需要知道他的第一个页面的地址,或者从另一个网站跳转。我们可能还想知道他来自哪个网站。(5) request.user_agent这用于获取用户正在使用的请求。比如使用windos笔记本或者谷歌Chrome的用户,就可以用这种方法获取。(6) request.files这是用于获取用户上传的文件的方法。比如用户在前端上传文件,我们可以直接调用save()方法,传入保存路径直接保存文件。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。