http 协议中post请求数据格式

这篇文章也有详细说过:https://www.cnblogs.com/QiKa/p/12863127.html

 

HTTP 协议规定 POST 提交的数据必须放在消息主体(entity-body)中

1、application/x-www-form-urlencoded 
#这应该是最常见的 POST 提交数据的方式了。浏览器的原生 form 表单,如果不设置 enctype 属性,那么最终就会以 application/x-www-form-urlencoded 方式提交数据
如:Content-Type: application/x-www-form-urlencoded ; charset=utf-8

2、multipart/form-data 
使用表单上传文件时,必须让 form 的 enctyped 等于这个值
如:
POST http://www.example.com HTTP/1.1 
Content-Type:multipart/form-data; boundary=---WebKitFormBoundaryrGKCBY7qhFd3TrwA ------WebKitFormBoundaryrGKCBY7qhFd3TrwA 
Content-Disposition: form-data; name="text"
title ------WebKitFormBoundaryrGKCBY7qhFd3TrwA 
Content-Disposition: form-data; name="file"; filename="chrome.png" Content-Type: image/png

3、application/json 
application/json把它作为请求头,用来告诉服务端,消息主体是序列化后的 JSON 字符串

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


实例:------------------------------------------------------------
Python在调用外部http请求时,post请求进行传 请求体body
1、application/x-www-form-urlencoded
import urllib
url = "http://www.example.com"
body_value = {"package": "com.tencent.lian","version_code": "66" }
body_value = urllib.urlencode(body_value)
request = urllib2.Request(url, body_value)
request.add_header(keys, headers[keys])
result = urllib2.urlopen(request ).read()

2、multipart/form-data 
需要利用python的poster模块,安装poster:pip install poster 
代码:
from poster.encode import multipart_encode 
from poster.streaminghttp import register_openers 
url = "http://www.baidu.com"
body_value = {"package": "com.tencent.lian","version_code": "77" }
register_openers()
datagen, re_headers = multipart_encode(body_value)
request = urllib2.Request(url, datagen, re_headers)
# 如果有请求头数据,则添加请求头
request .add_header(keys, headers[keys])
result = urllib2.urlopen(request ).read()

3、application/json
import json
url = "http://www.baidu.com"
body_value = {"package": "com.tencent.lian","version_code": "77" }
register_openers()
body_value = json.JSONEncoder().encode(_value)

 

posted on 2020-07-19 21:38  QiKa  阅读(716)  评论(0编辑  收藏  举报