python中的post请求解读

 更新时间:2024年11月18日 11:11:59   作者:dair6  
文章介绍了Python中POST请求的4种编码方式:application/x-www-form-urlencoded、multipart/form-data、application/json和text/xml,通过代码示例和工具使用,展示了如何发送和处理这些请求

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请求

使用代码:

import requests

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

使用postman

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

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

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

settings的配置

主路由的配置

from django.contrib import admin
from django.urls import path, re_path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    # 将主路由和子路由绑定
    path('', include('gp_app.urls')),
]

子路由的配置

from django.urls import re_path
from . import views

urlpatterns = [
    # name用于给视图命名,可以通过reverse反向解析
    re_path(r'try_get/', views.get, name='get请求'),
    re_path(r'try_post', views.post, name='post请求')
]

views.py的配置

from django.shortcuts import render
from django.http import HttpResponse


# Create your views here.
def get(request):
    if request.method == 'get':
        print(request.GET.getlist('c'))
        pass
    return HttpResponse("ok")


def post(request):
    if request.method == 'POST':
        print("request.method:", request.method)
        print("request.POST.getlist('a'):", request.POST.getlist('a'))
        print("request.POST.getlist('b'):", request.POST.getlist('b'))
        print("request.POST.getlist('c'):", request.POST.getlist('c'))
        print("request.POST:", request.POST)
        a = request.POST.get('a', 0)
        c = request.POST.get('c', 0)
        d = str({a: c})  # 需要注意的是,如果要使用HttpResponse来返回响应,参数需要是字符串,d如果不转换成str,返回的结果就是1
        return HttpResponse(d)

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

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

情况1:使用json_dumps

postData = {
					 'tid': 1'', 
                      'data': [{'name': 'rqlx', 'value': '0', 'sword': 'attr'},{'name': 'rq1', 'value': '1', 'sword': 'attr'}], 
                      'bindParam': 'true'
                      }
# 注意json.dumps转换成json格式,或许也能写成
# data = json.dumps({'postData':{ 'tid': 1'', 'data': [{'name': 'rqlx', 'value': '0'},{'name': 'rq1', 'value': '1'}], 'bindParam': 'true'}})
# 将json.dumps放在外层
data = {
				'postData':json.dumps(postData)
           }
resp = requests.post(
   url=url,
   data=data,
   headers=headers,
   # cookies=dict_cookie,  # cookie也可以用字典的形式写到headers,类似于'Cookie':'xxxxxxxxxx'
   timeout=240,
)

情况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

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Django 简单实现分页与搜索功能的示例代码

    Django 简单实现分页与搜索功能的示例代码

    这篇文章主要介绍了Django 简单实现分页与搜索功能的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-11-11
  • 在Django中管理Users和Permissions以及Groups的方法

    在Django中管理Users和Permissions以及Groups的方法

    这篇文章主要介绍了在Django中管理Users和Permissions以及Groups的方法,Django是最具人气的Python web开发框架,需要的朋友可以参考下
    2015-07-07
  • python算法测试结果自动保存到excel表格的实现步骤

    python算法测试结果自动保存到excel表格的实现步骤

    我们在进行算法评估是通常会针对每个样本的算法处理结果进行统计,例如每个样本正确预测数量、漏检数量和误检数量、精度等,本文小编将给大家介绍python算法测试结果自动保存到excel表格的实现步骤,感兴趣的朋友可以参考下
    2023-12-12
  • 详解如何使用SQLAlchemy连接数据库

    详解如何使用SQLAlchemy连接数据库

    这篇文章主要为大家详细介绍了如何使用 SQLAlchemy 连接数据库、建立模型、操作表、以及查询操作表数据等内容,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-11-11
  • 在Python中使用SimpleParse模块进行解析的教程

    在Python中使用SimpleParse模块进行解析的教程

    这篇文章主要介绍了在Python中使用SimpleParse模块进行解析的教程,文章来自于IBM官方的开发者技术文档,需要的朋友可以参考下
    2015-04-04
  • python实现类似Netty功能的异步编程

    python实现类似Netty功能的异步编程

    本文将介绍如何使用Python来实现本文将介绍如何使用Python来实现类似于Netty的功能,并提供一些代码示例来帮助读者理解,能够有所帮助,祝大家多多进步,早日升职加薪
    2023-11-11
  • python中rb含义理解

    python中rb含义理解

    在本篇文章里小编给大家整理的是关于python中rb含义及用法内容,需要的朋友们可以学习下。
    2020-06-06
  • Python中常用的统计检验代码分享

    Python中常用的统计检验代码分享

    统计检验是数据分析中的重要工具,用于检验数据集中的差异、关联和分布等统计性质,本文为大家整理了常见的统计检验方法,希望对大家有所帮助
    2024-01-01
  • python新手练习实例之万年历

    python新手练习实例之万年历

    最近进行python基础培训,课下作业制作万年历,之前没做过,感觉里面还是有很多需要学的,下面这篇文章主要给大家介绍了关于python新手练习实例之万年历的相关资料,需要的朋友可以参考下
    2022-05-05
  • Jupyter Lab无法打开终端窗口的解决方法

    Jupyter Lab无法打开终端窗口的解决方法

    本文主要介绍了Jupyter Lab无法打开终端窗口的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02

最新评论