python中Request Payload参数使用(持续更新)

在post请求中的参数中,Request Payload会经常碰到,但很多同学可能并未真正如何去使用,碰到复杂点的Request Payload往往一头雾水,下面就我日常所遇到的一些案例做个简单的说明,希望对大家有帮助。

关于Form Data与Request Payload的区别,可以参考文章:https://juejin.cn/post/6844904149809627149
https://leejason.blog.csdn.net/article/details/88720102

1 正常的json参数(非Request Payload)

这种是最普通常见的POST请求类型,请求头中Content-Type值通常为:application/x-www-form-urlencoded,也就是所谓的Form Data方式。
在scrapy的用法如下:

param = {"playerid": "25635555"}
return scrapy.FormRequest(url=self.url_post,
                          formdata=param,
                          meta={
                                'gameUserName': seed_keyword, #自定义参数
                                'SpiderRunTime': SpiderRunTime,#自定义参数
                                  },
                          dont_filter=True,
                          callback=self.parse)

在post中用法
requests.post(self.url_post, data=param )

2 简单Request Payload

如果发送失败的话,记得添加method=“POST”

param = {"playerid": "25635555"}
return scrapy.FormRequest(url=self.url_post,
                          body=json.dumps(param),#字典转换为json
                          meta={
                              'gameUserName': seed_keyword, #自定义参数
                              'SpiderRunTime': SpiderRunTime,#自定义参数
                          },
                          dont_filter=True,
                          callback=self.parse)

3 复杂Request Payload

如果是复杂Request Payload,比如Request Payload是列表或或有子字典等,简单用json.dumps(param)转换后请求会经常报错。且使用Scrapy框架时利用自带的FormReuqest 是无法完成要求的。一般用python requests,直接将内容转换为字符串提交。如下:
在这里插入图片描述
处理这个参数一般有两种方式:
A:字典转字符

headers = {
    "Accept": "application/json, text/plain, */*",
    "Content-Type": "application/json;charset=UTF-8;",
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36",
}
data = {
    "data": {
        "mainSearchPcConditionForm": {
            "city": "410",
            "dq": "410",
            "pubTime": "",
            "currentPage": 0,
            "pageSize": 40,
            "key": "",
            "suggestTag": "",
            "workYearCode": "",
            "compId": "",
            "compName": "",
            "compTag": "",
            "industry": "",
            "salary": "",
            "jobKind": "",
            "compScale": "",
            "compKind": "",
            "compStage": "",
            "eduLevel": ""
        },
        "passThroughForm": {
            "scene": "init",
            "ckId": "rdfpkd81uti5ryk4h8paa16kszjlk0kb",
            "suggest": None # 这里需要注意的是,在浏览器中我们看到这字段的值是null,由于python语法没有null类型,只能None。有些人喜欢用第三方工具从浏览器搬迁,比如用curl2py生成的结果,是‘’‘"suggest": null‘’‘,需要手动修改为"suggest": None,如果修改成"suggest": "null",转换后发送请求会报错的。
        }
    }
}

data = json.dumps(data)
res = requests.post(
    "https://apic.liepin.com/api/com.liepin.searchfront4c.pc-search-job",
    headers=headers,
    data=data
)

B:直接构造字符串
如下:

data = '''
    {"data":{"mainSearchPcConditionForm":{"city":"410","dq":"410","pubTime":"","currentPage":0,"pageSize":40,"key":"","suggestTag":"","workYearCode":"0","compId":"","compName":"","compTag":"","industry":"","salary":"","jobKind":"","compScale":"","compKind":"","compStage":"","eduLevel":""},"passThroughForm":{"scene":"init","ckId":"hnk5a1i55f1uelq0oqzjjxkp0edju1eb","suggest":null}}}
'''
res = requests.post(
    "https://apic.liepin.com/api/com.liepin.searchfront4c.pc-search-job",
    headers=headers,
    data=data
)
print(res.text)
print(res.status_code)
  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值