requests.post处理Content-Type: multipart/form-data的请求

参考文章:
https://www.cnblogs.com/woaixuexi9999/p/9263951.html

抓包app后,相关api 是 post 的这个形式 multipart/form-data
需要用Python代码模拟请求

代码如下

点击查看代码
#!/usr/bin/python
# -*- coding: UTF-8 -*-
from requests_toolbelt import MultipartEncoder

import requests

# url = 'https://mall.shopee.vn/api/v4/search/image_search/image_search'
url = 'http://127.0.0.1:8001'
headers = {
    "x-api-source": "rn",
    "referer": "https://mall.shopee.vn",
    "x-csrftoken": "MF24Q8kO0Jkugn4JBEtJY7tw37WRuecK",
    "x-search-entrance": "HOME",
    "x-search-image-source": "gallery_panel",
    "Referer": "https://mall.shopee.vn/",
    "X-CSRFToken": "s6TeryKi4vdKXxbWYg4qtEJItUE4UVa9",
    "X-Shopee-Client-Timezone": "Asia/Shanghai",
    "Client-Request-Id": "fe5d0795-2cf5-4304-80fe-328120dc5938.896",
    # "Content-Type": "multipart/form-data;",  这个请求头 不用加,加了反而有问题,可能是  post  里使用 files 就默认是这个?具体没有深究
    "Content-Length": "57569",
    "Host": "mall.shopee.vn",
    "User-Agent": "Android app Shopee appver=32334 app_type=1 platform=native_android os=27 Cronet/102.0.5005.61",
    "Connection": "Keep-Alive",
    "Accept-Encoding": "gzip, deflate, br",
    "af-ac-enc-dat": "",
    "af-ac-enc-id": "",
    "af-ac-enc-sz-token": "",
    "Cookie": ""
    }

data1 = {"a": "b", "c": "d"}

data = {
    'athenaCameraParams': (None, '{}'),
    'bounding_box': (None, '48,23,386,616'),
    'cat_id': (None, '0'),
    'cat_ids': (None, 'undefined'),
    'category': (None, 'Tất cả'),
    'is_cod': (None, 'undefined'),
    'is_mall': (None, 'undefined'),
    'item_id': (None, 'undefined'),
    'label_ids': (None, 'undefined'),
    'language': (None, '3'),
    'limit': (None, '20'),
    'md5': (None, 'imagesearch_'),
    'offset': (None, '20'),
    'result_type': (None, '0'),
    'shop_id': (None, 'undefined'),
    'sort_type': (None,'0'),
}

html = requests.post(url, headers=headers, verify=False, data=data1, files=data)
print(html.status_code)
print(html.text)

fiddler 内 抓包内容如下 ![image](https://img2024.cnblogs.com/blog/1463356/202405/1463356-20240523174930420-703514527.png)
点击查看代码
import requests
url = "http://www.httpbin.org/post"
data = {
    'age':28,
    'city':'深圳',
}
# 折中方案,参数按如下方式组织,也是模拟multipart/form-data的核心
params = {"username": ('username.txt', open('1.txt','r')), "password": (None, "abcd1234"),"location":('location.txt','福田区'),"picture":('1.jpg',open(r'C:\\Users\\1.jpg','rb'))}

res = requests.post(url, data=data,files=params)
结果是
点击查看代码
--1617b70c8a3c4bc49a9a3ae659fb224fContent-Disposition: form-data; name="age"28--1617b70c8a3c4bc49a9a3ae659fb224fContent-Disposition: form-data; name="city"深圳--1617b70c8a3c4bc49a9a3ae659fb224fContent-Disposition: form-data; name="username"; filename="username.txt"hello world!--1617b70c8a3c4bc49a9a3ae659fb224fContent-Disposition: form-data; name="password"abcd1234--1617b70c8a3c4bc49a9a3ae659fb224fContent-Disposition: form-data; name="location"; filename="location.txt"福田区--1617b70c8a3c4bc49a9a3ae659fb224fContent-Disposition: form-data; name="picture"; filename="1.jpg**二进制数据就不显示了**
--1617b70c8a3c4bc49a9a3ae659fb224f
posted @ 2024-05-23 17:52  nonamehhhhh  阅读(269)  评论(0)    收藏  举报