• python request post from 提交表单


    前言

    一个http请求包括三个部分,为别为请求行,请求报头,消息主体,类似以下这样:
    请求行
    请求报头
    消息主体
    HTTP协议规定post提交的数据必须放在消息主体中,但是协议并没有规定必须使用什么编码方式。
    服务端通过是根据请求头中的Content-Type字段来获知请求中的消息主体是用何种方式进行编码,再对消息主体进行解析。

    具体的编码方式包括:

    最常见post提交数据的方式,以form表单形式提交数据。application/x-www-form-urlencoded
    以json串提交数据。application/json
    上传文件。multipart/form-data

    三种编码请求实例

    1.提交Form表单

    Reqeusts支持以form表单形式发送post请求,只需要将请求的参数构造成一个字典,然后传给requests.post()的data参数即可。

    1. def post_sf_waybill_logistics(url, mailNo, phoneNum):
    2. logger.info('当前进度:{}', phoneNum)
    3. headers = {
    4. "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8"
    5. }
    6. mailData = {
    7. 'language': 0,
    8. 'trackingType': 1,
    9. 'trackingNumber': mailNo,
    10. 'methodType': 1,
    11. 'checkPhoneNo': phoneNum
    12. }
    13. # 转json&去空格
    14. data_json = json.dumps(mailData).replace(' ', '')
    15. postData = {
    16. 'msgData': data_json,
    17. 'serviceCode': 'EXP_ROUS'
    18. }
    19. # headers 指定 application/x-www-form-urlencoded
    20. # post提交时使用字典,不需要转为json提交
    21. res = requests.post(url, postData, headers=headers)
    22. # 将字符串json 转为json对象
    23. resu_j = json.loads(res.text)

    2.提交json串
    错误写法:json格式data参数不能传送字典,不然运行会报错
    即使写上了 'Content-Type':'application/json; charset=UTF-8' ,返回依然出错了,原因就在于 你的请求实体的格式错了,服务端无法解码。
    正确写法
    1.import json用json.dumps将字典转换成json格式r = requests.post(url=url,data=json.dumps(data),headers=headers)
    2.传参数时直接使用json,这个方法headers里面不用再传"Content-Type":"application/json; charset=UTF-8"r = requests.post(url=url,json=jdata,headers=headers)

    1. # 执行请求
    2. def post_url(url, body):
    3. body= authd = {"username": "111","password": "2222"}
    4. datajson = json.dumps(body)
    5. headers = {
    6. 'Content-Type': 'application/json',
    7. 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.61 Safari/537.36'
    8. }
    9. response = requests.post(url, data=datajson, headers=headers).json()
    10. #response = requests.post(url, json=datajson, headers=headers).json()
    11. logger.info(response)
    12. return response

    3.上传文件
    上传文件在爬虫中使用的很少,不过还是使用requests讲解一下使用方式。
    Content-Type类型为multipart/form-data,以multipart形式发送post请求

    相关操作可以查看另外一篇博客

  • 相关阅读:
    有不用出门就能做的副业吗?
    AI图书推荐:ChatGPT等生成式AI在高等教育中的应用
    【NODE.JS】多进程架构(二)—— 句柄传递
    Windows 实时语音转文字|免费语音视频翻译转文字|语音会议记录方案
    Rust交互式编程环境搭建
    2022届计算机毕业论文(设计)学生选题参考合集推荐收藏
    架构师的 36 项修炼第05讲:架构核心技术之分布式数据存储
    用HTML+CSS+JS做一个漂亮简单的公司网站(JavaScript期末大作业)
    [Java]剖析异常处理机制与常见面试题
    Spring常见的注解
  • 原文地址:https://blog.csdn.net/brightgreat/article/details/126610046