• python接口自动化二(发送post请求)


    前言

    一个http请求包括三个部分,为别为请求行,请求报头,消息主体,类似以下这样:

    • 请求行
    • 请求报头
    • 消息主体

    HTTP协议规定post提交的数据必须放在消息主体中,但是协议并没有规定必须使用什么编码方式。

    服务端通过是根据请求头中的Content-Type字段来获知请求中的消息主体是用何种方式进行编码,再对消息主体进行解析。

    具体的编码方式包括:

    application/x-www-form-urlencoded 

    最常见post提交数据的方式,以form表单形式提交数据。

    application/json 

    以json串提交数据。

    multipart/form-data 

    一般使用来上传文件。

    三种编码请求实例

    1.提交Form表单

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

    2.提交json串

    错误写法:json格式data参数不能传送字典,不然运行会报错

    headers可以用fiddler去抓取

    即使写上了 '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)  

    3.上传文件

     上传文件在爬虫中使用的很少,不过还是使用requests讲解一下使用方式。

    Content-Type类型为multipart/form-data,以multipart形式发送post请求,只需将一文件传给requests.post()的files参数即可。还是以http://httpbin.org/post 为例,

    代码如下:

    url = 'http://httpbin.org/post'
    files = {'file': open('upload.txt', 'rb')}
    r = requests.post(url, files=files)
    print(r.text)
  • 相关阅读:
    [转]用异或交换两个整数的陷阱
    线索化二叉树
    [转]Socket编程中,阻塞与非阻塞的区别
    两个链表的归并
    [转] std::string and stl 算法
    类图
    leetcode 答案
    about raw socket
    54. Spiral Matrix【数组】
    矩阵乘法问题的实现
  • 原文地址:https://www.cnblogs.com/si-dian/p/10881051.html
Copyright © 2020-2023  润新知