python - post请求传参

  基于自己踩过的坑,百度之后整理的,以备后期忘记之后,回忆回忆。

  http协议规定post传输数据必须放在消息体里,但并未规定使用什么编码方式,常见的编码方式有四种:

  1、application/x-www-form-urlencoded     浏览器的原生 form 表单,如果不设置 enctype 属性,那么最终就会以 application/x-www-form-urlencoded 方式提交数据。

    其传参方式为   key=value&key=value&key=value..   也就意味着是以字符串形式传输   

1 import requests
 from urllib import parse
2 url='xxxx' 3 str = 'key={"k1": "v1","k2": "k2"}&k2=v2'
data = parse.quote(str, safe='=&')    # safe 为不转码字符,此例子为 =和& 不做转码 4 headers = {'Content-Type': 'application/x-www-form-urlencoded'}  #headers必须要传 5 response = requests.post(url, data=data, headers=headers) 6 print(response.text)

  2、multipart/form-data     使用表单上传文件时,必须让 form 的 enctyped 等于这个值

    其传参方式为     files = {'name': (<filename>, <file object>,<content type>, <per-part headers>)}    如果filename 和 content-Type不写,那么响应模拟post的数据就不会有二者。

1 data = {
2     'k1':(None, 'v1'),      #filename设置为None
3     'k2':(None, 'v2')       #
4 }
5 response = requests.post(url, files=data)     #默认headers以multipart/form-data编码
6 print(response.text)

  3、application/json  消息主体是序列化后的 JSON 字符串

    其传参是标准的json格式,不做赘述

  4、text/xml       是一种使用 HTTP 作为传输协议,XML 作为编码方式的远程调用规范

    尚未遇到,不做赘述

 

posted @ 2018-09-19 11:23  试尝百味  阅读(984)  评论(0编辑  收藏  举报