python requests.post请求404问题及解决方法

 更新时间:2022年09月08日 10:29:07   作者:李飞飞_None  
这篇文章主要介绍了python requests.post请求404问题,这里需要根据自己实际情况来分析当前接口接收数据时使用的是什么格式,但目前一般的网站都开始采用application/jsond的数据格式,本文通过图文并茂的形式给大家介绍的非常详细,需要的朋友可以参考下

问题场景

有时候,在编写一段http接口请求程序时,发现代码中的header头和请求体中都是原网页中一样,但是,在实际请求时,接口却返回404,代码如下

header = {
    # ':authority': 'm.ctrip.com',
    # ':method': 'POST',
    # ':path': '/restapi/soa2/20405/getPCSightList',
    # ':scheme': 'https',
    'accept': '*/*',
    'accept-encoding': 'gzip, deflate, br',
    'accept-language': 'zh-CN,zh;q=0.9',
    'authorization': 'xx',
    'cache-control': "no-cache",
    'content-length': '373',
    'content-type': 'application/json;charset:utf-8;',
    'cookies': 'xx',
    'origin': 'https://www.tripadvisor.cn',
    'pragma': 'no-cache',
    'referer': 'https://www.tripadvisor.cn/Attractions-g60763-New_York_City_New_York-Vacations.html',
    'sec-ch-ua': "'.Not/A)Brand';v='99', 'Google Chrome';v='103', 'Chromium';v='103'",
    'sec-ch-ua-mobile': '?0',
    'sec-ch-ua-platform': 'macOS',
    'sec-fetch-dest': 'empty',
    'sec-fetch-mode': 'cors',
    'sec-fetch-site': 'cross-site',
    'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36',
    'x-ta-uid': 'cd58b674-7dba-484a-a908-3239120cd728'
}
url = 'https://m.ctrip.com/restapi/soa2/20405/getPCSightList'
data = {"geoId":60763,"pageIndex":1,"pageSize":30,"travelRanking":"false","needSelectedFilters":"true","filters":[{"type":"subcategory","param":""},{"type":"subtype","param":""},{"type":"neighborhood","param":""},{"type":"travelerRating","param":""},{"type":"awards","param":""},{"type":"waypointairport","param":""},{"type":"waypointstation","param":""},{"type":"other","param":""}]}
response = requests.post(url=url, data=data, headers=header)
print(response.status_code)

运行结果为

在这里插入图片描述

问题分析

既然404,那就排查问题,data和header都是直接从复制浏览器中复制过来的,不会有问题,那有问题的必然是request.post中的方法问题
查看request.post源码

在这里插入图片描述

从源码中可以看到,request.post可以接受两个参数,一个是data,还有一个是json,
data是以字典的形式发送body,json则是以json数据格式发送body
通过这两个注释可以很明显的发现,requests.post在发送请求时,会根据当前传递的参数来选择不同的方式,可以理解为一种是表单形式,还有一种是json格式

postman测试

通过postman来测试两种不同请求下的情况
form表单

在这里插入图片描述

Json数据

在这里插入图片描述

通过postman测试可以发现,当前服务后端接口仅接受json格式的数据,即content-type为application.json

问题解决

将原先代码中data替换成json

response = requests.post(url=url, json=data, headers=JsonHeader)

在这里插入图片描述

这个时候肯定有人会问,那我使用data传递数据时,将header头中的content-type指定为application/json不就行了,但其实是不行的,就算自己指定了,最后request.body的值也是类似于key1=value1&key2=value2这种形式

结论

当request.post使用json来传递参数时,即使不指定content-type类型,也会默认指定application/json

在这里插入图片描述

使用data传递参数时,将会以表单的形式进行提交,并且后续将通过urlencode转换成字符串,及key1=value1&key2=value2的形式

在这里插入图片描述

使用data时,即使指定了content-type也不会生效,后续将会被默认替换掉

在这里插入图片描述

因此,需要根据自己实际情况来分析当前接口接收数据时使用的是什么格式,但目前一般的网站都开始采用application/jsond的数据格式

到此这篇关于python requests.post请求404问题的文章就介绍到这了,更多相关python requests.post请求内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python爬取网页转换为PDF文件

    python爬取网页转换为PDF文件

    这篇文章主要为大家详细介绍了python爬取网页转换为PDF文件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-06-06
  • 详解Python和Rust中内存管理机制的实现与对比

    详解Python和Rust中内存管理机制的实现与对比

    Python和Rust都采用了垃圾收集(Garbage Collection)机制来管理内存,但它们各自的实现方式有很大的不同,下面就跟随小编一起来深入了解下二者的区别吧
    2024-03-03
  • 详解Pytorch中Dataset的使用

    详解Pytorch中Dataset的使用

    这篇文章主要为大家详细介绍了如何加载并处理TorchVision的FashionMNIST Dataset,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下
    2022-12-12
  • Python键值互换的实现示例

    Python键值互换的实现示例

    Python键值互换是一种对Python字典类型中键值对进行反转的技术,有时候,我们需要以值作为键,以键作为值来操作字典,这时候就需要用到键值互换的技术,本文主要介绍了Python键值互换的实现示例,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07
  • matplotlib之属性组合包(cycler)的使用

    matplotlib之属性组合包(cycler)的使用

    这篇文章主要介绍了matplotlib之属性组合包(cycler)的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-02-02
  • 浅谈PYTHON 关于文件的操作

    浅谈PYTHON 关于文件的操作

    这篇文章主要介绍了PYTHON 关于文件的操作,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-03-03
  • 使用Python实现分别输出每个数组

    使用Python实现分别输出每个数组

    今天小编就为大家分享一篇使用Python实现分别输出每个数组,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • python基于openpyxl生成excel文件

    python基于openpyxl生成excel文件

    这篇文章主要介绍了python基于openpyxl生成excel文件的方法,帮助大家更好的理解和使用python,感兴趣的朋友可以了解下
    2020-12-12
  • Python读取、写入txt文本内容详解

    Python读取、写入txt文本内容详解

    这篇文章主要介绍了Python读取、写入txt文本内容详解,python常用的读取文件函数有三种read()、readline()、readlines() ,今天来看一下三种函数的用法与三者的区别,需要的朋友可以参考下
    2023-08-08
  • 使用python进行拆分大文件的方法

    使用python进行拆分大文件的方法

    今天小编就为大家分享一篇使用python进行拆分大文件的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-12-12

最新评论