美文网首页
Http请求中的payload和formData

Http请求中的payload和formData

作者: SyKay | 来源:发表于2020-10-29 17:41 被阅读0次

FormData和Payload是浏览器传输给接口的两种格式,这两种方式浏览器是通过Content-Type来进行区分的。
如果是 application/x-www-form-urlencoded的话,则为formdata方式;
如果是 application/json或multipart/form-data的话,则为 request payload

的方式

1、 multipart/form-data抓包案例1

POST https://account.com.cn/oauth/token HTTP/1.1
Host: account.com.cn
Accept: */*
Content-Length: 687
Content-Type: multipart/form-data; boundary=------------------------e9b65d04803ea52c
--------------------------e9b65d04803ea52c
Content-Disposition: form-data; name="client_id"
studio10001
--------------------------e9b65d04803ea52c
Content-Disposition: form-data; name="client_secret"
clientSecret
--------------------------e9b65d04803ea52c
Content-Disposition: form-data; name="grant_type"
studio
--------------------------e9b65d04803ea52c
Content-Disposition: form-data; name="password"
password
--------------------------e9b65d04803ea52c
Content-Disposition: form-data; name="username"
13226617607
--------------------------e9b65d04803ea52c
Content-Disposition: form-data; name="lang"
zh_CN
--------------------------e9b65d04803ea52c--

HTTP/1.1 200
Cache-Control: no-store
Pragma: no-cache
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
X-Frame-Options: DENY
Content-Type: application/json;charset=UTF-8
Date: Wed, 17 Jun 2020 13:59:42 GMT
Content-Length: 170


python请求方式1

from requests_toolbelt import MultipartEncoder
import requests
url = 'https://account.com.cn/oauth/token'
fields = {
    'client_id': 'studio10001',
    'client_secret': 'clientSecret',
    'grant_type': 'studio',
    'password': 'password',
    'username': '13226617607',
    'lang': 'zh_CN'
}
self._me = MultipartEncoder(fields=fields)
headers = {'Content-Type': self._me.content_type}
result = requests.post(url=url, data=self._me, headers=headers, proxies=proxies, verify=False)
print('获取token结果:', result.json())

multipart/form-data抓包案例2

image.png

python请求方式2

from urllib.parse import urlencode
headers = {"Content-Type": "application/x-www-form-urlencoded"}
url = 'https://support.com.cn/admin/user/' + ID + '/abuse-point'
data = {
    "userName": userName,  # 用户名
    "point": point,  # 金币数值
    "memo": memo  # 备注
}
data = urlencode(data)
result = session.post(url=url, headers=headers, data=data, verify=False)

2、 application/json抓包案例

POST http://*****.com HTTP/1.1
Host: support1.com.cn:8090
Accept: */*
Content-Type: application/json
Content-Length: 698

{
    "access_token": "38b9ac08-1ed5-4571-8673-1d8f00f890f6",
    "act_custName": "***** ",
    "act_phone": "13226617607",
    "session_id": "20200617215838698"
}

HTTP/1.1 200 OK
Content-Type: text/plain
Content-Length: 2

python请求方式

import requests
headers = {"Content-Type": "application/x-www-form-urlencoded"}
url = 'https://support.com.cn/admin/user/' + ID + '/abuse-point'
data = {
    "userName": userName,  # 用户名
    "point": point,  # 金币数值
    "memo": memo  # 备注
}
data = urlencode(data)
result = session.post(url=url, headers=headers, data=data, verify=False)

在application/json模拟请求中,我们的请求数据data是一个字典类型,实际上在传输过程中,data会转换为文本形式,我们只需要确保传输内容中有中括号就行,如{"key":"value"},就算我们先将字典转化为字符串,照样可以请求成功。
通常来说,我习惯将数据先创建为字典类型(主要是比较好处理和观看方便)

# 字典转为字符串方式1
import json
data = json.dumps(data)

# 字典转为字符串方式2
data = str(data)

# 字典转为字符串方式1
import json
data = json.dumps(data)


相关文章

网友评论

      本文标题:Http请求中的payload和formData

      本文链接:https://www.haomeiwen.com/subject/yfvdvktx.html