当前位置: 首页 > news >正文

BUG解决:postman可以请求成功,但Python requests请求报403

目录

问题背景

问题定位

问题解决


问题背景

使用Python的requests库对接物联数据的接口之前一直正常运行,昨天突然请求不通了,通过进一步验证发现凡是使用代码调用接口就不通,而使用postman就能调通,请求参数啥的都没变。

接口返回的结果如下:

<!DOCTYPE html>\n<html>\n<head>\n<meta charset="utf-8">\n<meta name="viewport" content="width=device-width, initial-scale=1.0">\n<title>403</title>\n<style type="text/css">\nbody {\n    background-color: #f3f3f4;\n    color: #676a6c;\n    height: 100%;\n    font-family: -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";\n}\n\n.middle-box {\n  max-width: 600px;\n  z-index: 100;\n  margin: 0 auto;\n  padding-top: 40px;\n  text-align: center;\n}\n\n.middle-box h1 {\n  font-size: 170px;\n  font-weight: 100;\n  margin-top: 20px;\n  margin-bottom: 10px;\n}\n\n.btn {\n  border-radius: 3px;\n  font-size: inherit;\n  display: inline-block;\n  width: 100px;\n  height: 30px;\n  line-height: 30px;\n  background-color: #1ab394;\n  border-color: #1ab394;\n  color: #fff;\n  cursor: pointer;\n  font-size: 14px;\n}\n\n.btn:hover {\n  background-color: #1c8570;\n}\n\n.btn:active {\n  background-image: none;\n  outline: 0;\n  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n  box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n\n.buttons {\n    margin-top: 30px;\n}\n\n</style>\n</head>\n<body>\n    <div class="middle-box">\n        <h1>403</h1>\n        <h3 class="font-bold">Forbidden</h3>\n        <div class="error-desc">å\x9b\xa0æ\x9d\x83é\x99\x90é\x97®é¢\x98æ\x88\x96è¡\x8c为é\x9d\x9eæ³\x95ï¼\x8cæ\x82¨ç\x9a\x84访é\x97®è¢«æ\x8b\x92ç»\x9dã\x80\x82</div>\n        <div class="buttons"><a class="btn btn-primary" οnclick="javascript:history.back()">è¿\x94å\x9b\x9e</a></div>\n    </div>\n</body>\n</html>

问题定位

初步断定,在使用requests调用接口时少了点什么,而postman则有这个东西。

后来发现,postman在请求的时候自动加上了请求头User-Agent,而代码中headers中没有配置这一项。

User-Agent请求头是HTTP请求中的一个头部字段,它包含了发起请求的应用程序的信息。这个字段通常用于告知服务器,发起请求的是哪种浏览器、设备、操作系统或者应用程序。服务器可以根据这个信息来决定是否允许该请求,或者根据不同的客户端类型返回不同的内容。

User-Agent字符串通常包含了以下信息:

  • 浏览器名称和版本
  • 操作系统名称和版本
  • 设备类型(如智能手机、平板电脑、桌面电脑)
  • CPU类型
  • 默认语言

问题解决

在代码中加上自定义User-Agent请求头即可:

import requestsurl = "……"
headers = {'Content-Type': 'application/x-www-form-urlencoded', 'User-Agent': "PostmanRuntime/7.39.0"}
req = requests.get(url=url, headers=headers)

同理,也可以将User-Agent请求头设置为Chrome浏览器:

headers = { 'Content-Type': 'application/x-www-form-urlencoded', 
'User-Agent':"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3"}

该请求头告诉服务器,请求是由一个运行在Windows 10上的64位版本的Chrome 58浏览器发起的。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 开源模型应用落地-Yi模型小试-开源模型 vs 闭源模型(四)
  • VSCode设置好看清晰的字体!中文用鸿蒙,英文用Jetbrains Mono
  • 【机器学习】12.十大算法之一支持向量机(SVM - Support Vector Machine)算法原理讲解
  • Unity之VS脚本自动添加头部注释Package包开发
  • 昇思25天训练营Day11 - 基于 MindSpore 实现 BERT 对话情绪识别
  • 坑2.Date类型的请求参数
  • Mysql中常用函数的使用示例
  • Python 视频的色彩转换
  • RedisTemplate使用
  • vue实例和容器的一夫一制——04
  • 【项目实战】深入解析HTTP状态码:500 Internal Server Error
  • 【测试开发】--安全渗透测试
  • 判断链表中是否有环(力扣141.环形链表)
  • Spring开发实践(二)
  • 深度学习-梯度下降算法-NLP(五)
  • 【跃迁之路】【519天】程序员高效学习方法论探索系列(实验阶段276-2018.07.09)...
  • 2017-09-12 前端日报
  • conda常用的命令
  • Intervention/image 图片处理扩展包的安装和使用
  • java2019面试题北京
  • JS进阶 - JS 、JS-Web-API与DOM、BOM
  • Laravel Telescope:优雅的应用调试工具
  • NLPIR语义挖掘平台推动行业大数据应用服务
  • PHP 小技巧
  • SpringBoot 实战 (三) | 配置文件详解
  • Spring框架之我见(三)——IOC、AOP
  • Vue 动态创建 component
  • 从0到1:PostCSS 插件开发最佳实践
  • 如何利用MongoDB打造TOP榜小程序
  • 三分钟教你同步 Visual Studio Code 设置
  • 3月27日云栖精选夜读 | 从 “城市大脑”实践,瞭望未来城市源起 ...
  • SAP CRM里Lead通过工作流自动创建Opportunity的原理讲解 ...
  • 关于Kubernetes Dashboard漏洞CVE-2018-18264的修复公告
  • # Swust 12th acm 邀请赛# [ E ] 01 String [题解]
  • #pragma once与条件编译
  • $NOIp2018$劝退记
  • ()、[]、{}、(())、[[]]命令替换
  • (10)Linux冯诺依曼结构操作系统的再次理解
  • (2)Java 简介
  • (九)One-Wire总线-DS18B20
  • (十)Flink Table API 和 SQL 基本概念
  • (文章复现)基于主从博弈的售电商多元零售套餐设计与多级市场购电策略
  • (转)mysql使用Navicat 导出和导入数据库
  • (转载)PyTorch代码规范最佳实践和样式指南
  • .NET CF命令行调试器MDbg入门(三) 进程控制
  • .NET DevOps 接入指南 | 1. GitLab 安装
  • .NET 的程序集加载上下文
  • .net 获取某一天 在当月是 第几周 函数
  • .NET6实现破解Modbus poll点表配置文件
  • .net生成的类,跨工程调用显示注释
  • .NET文档生成工具ADB使用图文教程
  • .Net转前端开发-启航篇,如何定制博客园主题
  • /var/spool/postfix/maildrop 下有大量文件
  • :not(:first-child)和:not(:last-child)的用法
  • @private @protected @public