linux 为什么相同的请求会在两台计算机上产生不同的状态代码200和429?

e4eetjau  于 2023-01-12  发布在  Linux
关注(0)|答案(2)|浏览(149)

下面是我的脚本:

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("python3 --version") #On Windows it changes to os.system("python --version")

for i in ips:
    pr = {'http':"http://"+"abcd-"+i+':xyz@example.io:22225','https':'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).text)
    print(res1.status_code)

Windows 10上的输出:

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 18.04上的输出:

Python 3.8.0
{
  "origin": "158.46.169.208"
}

429
{
  "origin": "158.46.169.252"
}

429
{
  "origin": "158.46.169.76"
}

429
{
  "origin": "158.46.171.23"
}

429
{
  "origin": "158.46.172.217"
}

429
{
  "origin": "158.46.172.55"
}

429
{
  "origin": "158.46.172.98"
}

429
{
  "origin": "158.46.173.104"
}

429

无论我运行脚本多少次(甚至在两台机器上同时运行),输出总是相同的。
我不能理解为什么它阻止Ubuntu上的请求。同时,它允许来自Windows机器的相同请求,而使用相同的代理。
我知道429错误意味着太多的请求,但为什么它得到成功的所有时间,我在Windows机器上运行?

    • 编辑:**我有一台双启动笔记本电脑,所以我在我的笔记本电脑上登录了Ubuntu 18.04,我的笔记本电脑上也有Windows。它似乎在这里工作得很好。与Windows相同的行为。但当我在我的服务器上运行Ubuntu 18.04时,它仍然失败,一切都与上面相同。
bzzcjhmw

bzzcjhmw1#

您需要理解HTTP响应200(HTTP OK)和429(太多请求)的含义,如this Wikipedia article中所述。
正如您所看到的,问题似乎不是由于您的程序,而是由于您正在使用的机器,它似乎发出了太多的请求(至少服务器是这样理解它的)。
简而言之,您正在处理与网络相关的问题,您可以考虑与网络管理员讨论此问题。

0x6upsns

0x6upsns2#

您需要将Accept-Encoding包含到标头中。

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", "Accept-Handling": "gzip, deflate, br"}

os.system("python3 --version") #On Windows it changes to os.system("python --version")

for i in ips:
    pr = {'http':"http://"+"abcd-"+i+':xyz@example.io:22225','https':'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).text)
    print(res1.status_code)

相关问题