热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

探究同一请求在不同机器上返回不同HTTP状态码200和429的原因

本文探讨了为何相同的HTTP请求在两台不同操作系统(Windows与Ubuntu)的机器上会分别返回200OK和429TooManyRequests的状态码。我们将分析代码、环境差异及可能的影响因素。

以下是用于测试的Python脚本,该脚本旨在通过一系列代理服务器向Google发送搜索请求,并检查返回的状态码:

import requests, os
ips = ['158.46.169.208', '158.46.169.252', '158.46.169.76', '158.46.171.23', '158.46.172.217', '158.46.172.55', '158.46.172.98', '158.46.173.104']
headers = {"User-Agent": "Edg/90.0.818.56"}
os.system("python --version") # Note: On Windows use python --version
for i in ips:
pr = {'http': f'http://abcd-{i}:xyz@example.io:22225', 'https': f'https://abcd-{i}:xyz@example.io:22225'}
res1 = requests.get('https://www.google.com/search?q=butter', headers=headers, proxies=pr)
print(requests.get('https://www.httpbin.org/ip', proxies=pr, headers=headers).json())
print(res1.status_code)

在Windows 10上运行此脚本时,所有请求均成功并返回200状态码。然而,在Ubuntu 18.04服务器上运行时,部分请求返回了429状态码。


具体输出如下:


# Ubuntu 18.04 输出示例
Python 3.8.2
{'origin': '158.46.169.208'}
200
{'origin': '158.46.169.252'}
429
{'origin': '158.46.169.76'}
200
{'origin': '158.46.171.23'}
200
{'origin': '158.46.172.217'}
200
{'origin': '158.46.172.55'}
200
{'origin': '158.46.172.98'}

无论我如何调整代码或增加等待时间,结果始终保持一致:在Ubuntu服务器上某些IP地址始终触发429错误,而在Windows机器上则没有此类问题。


经过进一步调查,发现以下几点可能是导致这一现象的原因:



  • 代理服务器配置差异:不同的代理服务器可能会有不同的速率限制策略。某些代理服务器可能对特定操作系统或环境施加更严格的限制。

  • 网络环境差异:Windows和Ubuntu所处的网络环境可能存在差异,例如防火墙设置、ISP政策等,这些都可能导致请求被不同对待。

  • 用户代理标识:尽管使用了相同的User-Agent头信息,但某些网站或服务可能会根据其他特征识别出客户端的具体操作系统类型,并据此做出响应。

  • 缓存机制:浏览器缓存或其他中间层缓存机制也可能影响请求的结果。例如,某些缓存可能仅适用于特定的操作系统。


为了解决这个问题,建议尝试以下方法:



  • 检查并优化代理服务器配置,确保所有代理服务器具有相似的速率限制规则。

  • 确认两个操作系统的网络配置是否一致,包括防火墙设置、路由表等。

  • 尝试更改User-Agent字符串,以排除因操作系统识别而导致的问题。

  • 考虑引入随机延迟或降低并发请求数量,以避免触发目标服务器的速率限制。


此外,值得注意的是,即使在同一台双启动笔记本电脑上,Ubuntu和Windows的行为也有所不同,这进一步表明问题可能与底层操作系统特性有关。建议深入研究操作系统层面的网络栈实现差异,以及它们如何影响HTTP请求的处理过程。


推荐阅读
  • 在尝试使用C# Windows Forms客户端通过SignalR连接到ASP.NET服务器时,遇到了内部服务器错误(500)。本文将详细探讨问题的原因及解决方案。 ... [详细]
  • 在编译BSP包过程中,遇到了一个与 'gets' 函数相关的编译错误。该问题通常发生在较新的编译环境中,由于 'gets' 函数已被弃用并视为安全漏洞。本文将详细介绍如何通过修改源代码和配置文件来解决这一问题。 ... [详细]
  • docker镜像重启_docker怎么启动镜像dock ... [详细]
  • 本文详细介绍了一种通过MySQL弱口令漏洞在Windows操作系统上获取SYSTEM权限的方法。该方法涉及使用自定义UDF DLL文件来执行任意命令,从而实现对远程服务器的完全控制。 ... [详细]
  • 本文将探讨2015年RCTF竞赛中的一道PWN题目——shaxian,重点分析其利用Fastbin和堆溢出的技巧。通过详细解析代码流程和漏洞利用过程,帮助读者理解此类题目的破解方法。 ... [详细]
  • yikesnews第11期:微软Office两个0day和一个提权0day
    点击阅读原文可点击链接根据法国大选被黑客干扰,发送了带漏洞的文档Trumps_Attack_on_Syria_English.docx而此漏洞与ESET&FireEy ... [详细]
  • 本文探讨了如何在Classic ASP中实现与PHP的hash_hmac('SHA256', $message, pack('H*', $secret))函数等效的哈希生成方法。通过分析不同实现方式及其产生的差异,提供了一种使用Microsoft .NET Framework的解决方案。 ... [详细]
  • ListView简单使用
    先上效果:主要实现了Listview的绑定和点击事件。项目资源结构如下:先创建一个动物类,用来装载数据:Animal类如下:packagecom.example.simplelis ... [详细]
  • 搭建Jenkins、Ant与TestNG集成环境
    本文详细介绍了如何在Ubuntu 16.04系统上配置Jenkins、Ant和TestNG的集成开发环境,涵盖从安装到配置的具体步骤,并提供了创建Windows Slave节点及项目构建的指南。 ... [详细]
  • 软件工程课堂测试2
    要做一个简单的保存网页界面,首先用jsp写出保存界面,本次界面比较简单,首先是三个提示语,后面是三个输入框,然 ... [详细]
  • 2017-2018年度《网络编程与安全》第五次实验报告
    本报告详细记录了2017-2018学年《网络编程与安全》课程第五次实验的具体内容、实验过程、遇到的问题及解决方案。 ... [详细]
  • 掌握Mosek矩阵运算,轻松应对优化挑战
    本篇文章继续深入探讨Mosek学习笔记系列,特别是矩阵运算部分,这对于优化问题的解决至关重要。通过本文,您将了解到如何高效地使用Mosek进行矩阵初始化、线性代数运算及约束域的设定。 ... [详细]
  • 本文介绍如何在Windows Forms应用程序中使用C#实现DataGridView的多列排序功能,包括升序和降序排序。 ... [详细]
  • 本文详细介绍了钩子(hook)的概念、原理及其在编程中的实际应用。通过对比回调函数和注册函数,解释了钩子的工作机制,并提供了具体的Python示例代码,帮助读者更好地理解和掌握这一重要编程工具。 ... [详细]
  • Asp.net MVC 中 Bundle 配置详解:合并与压缩 JS 和 CSS 文件
    本文深入探讨了 Asp.net MVC 中如何利用 Bundle 功能来合并和压缩 JavaScript 和 CSS 文件,提供了详细的配置步骤和示例代码,适合开发人员参考学习。 ... [详细]
author-avatar
mobiledu2502887403
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有