0


python post请求

python post请求

post请求有4中编码方式

1.application/x-www-form-urlencoded

application/x-www-form-urlencoded是浏览器原生的form表单,提交的数据会按照key1=val1&key2=val2的格式,经过url转码,然后传输

(1)发送post请求

我们除了可以直接编写代码发送post请求,也可以使用postman来构造post请求

使用代码:

  1. import requests
  2. url = 'https://www.xxxxxx.com/'
  3. # 需要注意的是Content-Length参数如果没有,data表单则不会随着请求被发送给服务端,且使用fiddler抓包的过程中,也无法看到data表单
  4. headers = {
  5. 'Content-Type': 'application/x-www-form-urlencoded',
  6. 'Content-Length':'<calculated when request is sent>'
  7. }
  8. data = {'a': 1, 'b': 2,'c':'测试'}
  9. result = requests.post(url, headers=headers, data=data)
  10. print(result.content.decode('utf-8'))

使用postman

在这里插入图片描述
在这里插入图片描述

(2)截获post请求,使用fiddler

在这里插入图片描述

(3)接收post请求,返回响应

使用django3的版本,目录结构如下

在这里插入图片描述

settings的配置

在这里插入图片描述

主路由的配置

  1. from django.contrib import admin
  2. from django.urls import path, re_path, include
  3. urlpatterns = [
  4. path('admin/', admin.site.urls),
  5. # 将主路由和子路由绑定
  6. path('', include('gp_app.urls')),
  7. ]

子路由的配置

  1. from django.urls import re_path
  2. from . import views
  3. urlpatterns = [
  4. # name用于给视图命名,可以通过reverse反向解析
  5. re_path(r'try_get/', views.get, name='get请求'),
  6. re_path(r'try_post', views.post, name='post请求')
  7. ]

views.py的配置

  1. from django.shortcuts import render
  2. from django.http import HttpResponse
  3. # Create your views here.
  4. def get(request):
  5. if request.method == 'get':
  6. print(request.GET.getlist('c'))
  7. pass
  8. return HttpResponse("ok")
  9. def post(request):
  10. if request.method == 'POST':
  11. print("request.method:", request.method)
  12. print("request.POST.getlist('a'):", request.POST.getlist('a'))
  13. print("request.POST.getlist('b'):", request.POST.getlist('b'))
  14. print("request.POST.getlist('c'):", request.POST.getlist('c'))
  15. print("request.POST:", request.POST)
  16. a = request.POST.get('a', 0)
  17. c = request.POST.get('c', 0)
  18. d = str({a: c}) # 需要注意的是,如果要使用HttpResponse来返回响应,参数需要是字符串,d如果不转换成str,返回的结果就是1
  19. return HttpResponse(d)

运行django之后,控制台的结果

在这里插入图片描述

(4)data表单使用嵌套的数据结构如何处理

情况1,使用json_dumps

  1. postData = {
  2. 'tid': 1'',
  3. 'data': [{'name': 'rqlx', 'value': '0', 'sword': 'attr'},{'name': 'rq1', 'value': '1', 'sword': 'attr'}],
  4. 'bindParam': 'true'
  5. }
  6. # 注意json.dumps转换成json格式,或许也能写成
  7. # data = json.dumps({'postData':{ 'tid': 1'', 'data': [{'name': 'rqlx', 'value': '0'},{'name': 'rq1', 'value': '1'}], 'bindParam': 'true'}})
  8. # 将json.dumps放在外层
  9. data = {
  10. 'postData':json.dumps(postData)
  11. }
  12. resp = requests.post(
  13. url=url,
  14. data=data,
  15. headers=headers,
  16. # cookies=dict_cookie, # cookie也可以用字典的形式写到headers,类似于’Cookie':'xxxxxxxxxx'
  17. timeout=240,
  18. )

情况2:使用url编码

有的时候表单提交时,需要先进行url转码,关键在于后端到底要接收什么类型的数据,如果我们不知道后端能处理的数据,有时就只能靠猜,用不同的方法尝试将表单处理成能被后端解析的格式
from urllib.parse import urlencode
data = {‘a’: 1, ‘b’: 2,‘c’:‘测试’}
data =urlencode(data)
resp = reuquest.post(url=url,headers=headers,data=data)

2.multipart/form-data

multipart/form-data是常用来上传文件的表单

application/json

text/xml

标签: python django postman

本文转载自: https://blog.csdn.net/dair6/article/details/127112344
版权归原作者 dair6 所有, 如有侵权,请联系我们删除。

“python post请求”的评论:

还没有评论