python post 请求能字符串提交data 吗?

import requests
import json
headers = {
    'siua': '+Ez31O2TuVcKYqRriGBNdegPqtB/JoVJKKcCXrtPJ7wW3gn9TBLVVj11GB3St3IZi6MxbW3fJVKKS1X7Gs4zaK5hHdJMHN3dU7B4Kopx5EA9ceGSBKKC3klKUoLaurCWM0bJz+JYa7wZEe7D4UalISxy52n8EBZASmVZFRlKUX/0Jv+TXlqq1eabHS5Pii0H+ELzbVWRUcOK0if5ptSUYI4hS+bPlCzQmuwi0D31BeqmuOVfsNwi7ihCTyq4vKeY7bHG4jc7P0i9UD6Sj5+IUcSNOzjbUGbMWPq/fPFrm7aoaRxaIcbqozfJbgFMnPfJ8hwlnJk4AETKkGQBxIE3J75FTdB3RKqX7V865oEcrZFQWhmVS6CUTiCHxoKEg0HTl4nJVMtQhggMKeWkvDH4hYkELyg6b8CLfwEtWRYtQJZ/wsjAtRprW96y8ykvh2wkJ+Q4z3SV3LZ+eqI2SxfH2NYugGu7jtJiZm9UeQi3pN2jhSuXZuIYRD9xZlabsC5cDGwhup9L+vIrdQvaNr3elpm1L1AvYghY7KJ9xpgAVLc=',
    'M-SHARK-TRACEID': '1117588882a0e294a7aa2b899aeb820d493a16158490639186360345720b1624438120749904d79',
    'mtgdid': 'AAAAAAAAAAAAAKc6-k_axXcL7R7qrceR06CfeiUu6Am8L9HoSO4HNXBLsVWf1BtbH1X6kAN9iPmH5JENJM0IxXC1ZTaOo2GvYp8',
    'User-Agent': 'Dalvik/2.1.0 (Linux; U; Android 8.0.0; Pixel XL Build/OPR1.170623.032)',
    'Host': 'wmapi.meituan.com',
}


data = {
  'latitude': '40042967',
  'longitude': '116373378',
  'page_index': '0',
  'page_size': '20',
  'sort_type': '0',
  'category_type': '910',
  'filter_type': '0',
  'second_category_type': '0',
  'navigate_type': '910',
  'activity_filter_codes': '',
  'slider_select_data': '',
  'load_type': '1',
  'preload': '0',
  'trace_tag': '',
  'rank_trace_id': '',
  'session_id': 'b83184c5-ed16-487c-83b8-a16e6aa4c5f81624438104723182',
  'union_id': '7588882a0e294a7aa2b899aeb820d493a161584906391863603',
  'app': '4',
  'wm_longitude': '116373378',
  'wm_actual_latitude': '40042967',
  'wm_appversion': '7.8.4',
  'wm_did': '352693080362599',
  'wm_ctype': 'android',
  'userid': '580425162',
  'uuid': '00000000000007588882A0E294A7AA2B899AEB820D493A161584906391863603',
  'version': '7.8.4',
  'platform': '4',
  'wm_latitude': '40042967',
  'wm_actual_longitude': '116373378',
  'wm_dtype': 'Pixel XL',
  'wm_uuid': '00000000000007588882A0E294A7AA2B899AEB820D493A161584906391863603',
  'partner': '4',
  'wm_visitid': '868efac4-4b9e-407f-b760-6a7d6166fbee',
  'wm_dversion': '26_8.0.0',
  'seq_id': '33',
  'wm_channel': '1017',
  'wm_mac': '02:00:00:00:00:00',
  'request_id': '304DAC6B-A0DA-465A-AC93-6002FA6AD378',
  'wm_logintoken': '3dPkFJZbwvyvnmC927NVCaO4iTQAAAAA0A0AADwb8tLwNgtVHoBm3p8VgO8hrLEC42wgFi0wzr-wDIbfcdXyNlcFRswaNo2PkWb5zQ',
  'push_token': 'dpsh90684e79a01ec6b8d2ee9ea4a4c6d10aatpu',
  'waimai_sign': 'aiJKqTdueIQck98wrWPHAPrM9c8HXrz2Bd+mNYDKbsPEiv0n6mN7eB4mKZTo4MsjLz3k84i1QeHoTjYIyymaeGa8nvbgPI+4jT7doxI6/ORgQlQlXm/NbKA0Czoo7PYjnvfoblg36M8I9muhzDcc1r/M6ovpfHROpjd0ZdxMvzw=',
  'wm_seq': '27',
  'req_time': '1624438120738'
}

data1='latitude=40042967&longitude=116373378&page_index=0&page_size=20&sort_type=0&category_type=910&filter_type=0&second_category_type=0&navigate_type=910&activity_filter_codes=&slider_select_data=&load_type=1&preload=0&trace_tag=&rank_trace_id=&session_id=b83184c5-ed16-487c-83b8-a16e6aa4c5f81624438104723182&union_id=7588882a0e294a7aa2b899aeb820d493a161584906391863603&app=4&wm_longitude=116373378&wm_actual_latitude=40042967&wm_appversion=7.8.4&wm_did=352693080362599&wm_ctype=android&userid=580425162&uuid=00000000000007588882A0E294A7AA2B899AEB820D493A161584906391863603&version=7.8.4&platform=4&wm_latitude=40042967&wm_actual_longitude=116373378&wm_dtype=Pixel+XL&wm_uuid=00000000000007588882A0E294A7AA2B899AEB820D493A161584906391863603&partner=4&wm_visitid=868efac4-4b9e-407f-b760-6a7d6166fbee&wm_dversion=26_8.0.0&seq_id=33&wm_channel=1017&wm_mac=02%3A00%3A00%3A00%3A00%3A00&request_id=304DAC6B-A0DA-465A-AC93-6002FA6AD378&wm_logintoken=3dPkFJZbwvyvnmC927NVCaO4iTQAAAAA0A0AADwb8tLwNgtVHoBm3p8VgO8hrLEC42wgFi0wzr-wDIbfcdXyNlcFRswaNo2PkWb5zQ&push_token=dpsh90684e79a01ec6b8d2ee9ea4a4c6d10aatpu&waimai_sign=aiJKqTdueIQck98wrWPHAPrM9c8HXrz2Bd%2BmNYDKbsPEiv0n6mN7eB4mKZTo4MsjLz3k84i1QeHoTjYIyymaeGa8nvbgPI%2B4jT7doxI6%2FORgQlQlXm%2FNbKA0Czoo7PYjnvfoblg36M8I9muhzDcc1r%2FM6ovpfHROpjd0ZdxMvzw%3D&wm_seq=27&req_time=1624438120738'
url='http://wmapi.meituan.com/api/v7/poi/channelpage?utm_term=70804&utm_campaign=AwaimaiBwaimai&ci=1&utm_medium=android&uuid=00000000000007588882A0E294A7AA2B899AEB820D493A161584906391863603&utm_source=1017&utm_content=352693080362599&region_id=2000000205&region_version=1624438163583&__skck=8f5973b085446090f224af74e30e0181&__skts=1624438120&__skua=d41d8cd98f00b204e9800998ecf8427e&__skno=ae62280a-6d43-4e08-abca-183772c5b890&__skcy=6OZcWkocXFXkydcACmuWQY9tHhs%3D'
response = requests.post(url, headers=headers, data=data)

print(response.text)

能不能字符串提交data 呢?因为整体的data 我要做签名校验。或者不需要把这个字符串转换成json格式的也可以,因为每次要把字符串转换json 麻烦

阅读 4.1k
3 个回答

你这个写法 :
response = requests.post(url, headers=headers, data=data) 就是键值对方式提交啊
JSON提交是这样的:
response = requests.post(url, headers=headers, json=data)

根据官方文档的说明:

  • 如果 data 参数传入的是 一个字典一个元组列表,在发出请求时会自动编码为表单形式
payload = {'key1': 'value1', 'key2': 'value2'}
# payload = (('key1', 'value1'), ('key1', 'value2'))
r = requests.post('http://httpbin.org/post', data=payload)
print(r.text)
{
  ...
  "form": {
    "key1": [
      "value1",
      "value2"
    ]
  },
  ...
}
  • 如果 data 参数传入的是 一个字符串,那么数据会被直接发布出去。比如我们的请求数据是 JSON 格式的,我们可以这样做:
import json

url = 'https://api.github.com/some/endpoint'
payload = {'some': 'data'}

r = requests.post(url, data=json.dumps(payload))

但在 requests 2.4.2 版本后,我们更愿意使用 json 参数来做这件事:

url = 'https://api.github.com/some/endpoint'
payload = {'some': 'data'}

r = requests.post(url, json=payload)

Ok,回归问题,根据你提供的代码,可以知道:

  • 请求类型(Content-Type)是 application/x-www-form-urlencoded
  • 需要对请求的数据进行签名,签名内容的格式是 key1=value1&key2=value2

综上来看,我们只能写个方法将字符串转成 json 了:

def convert(s):
    d = {}
    for kv in s.split('&'):
        kv = kv.split('=')
        d[kv[0]] = kv[1]
    return d

这样就可以使用 convert(data1) 得到对应字符串的 json 了。

能, data的类型可以是str.

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进