我正在尝试使用Python登录网站并从几个网页收集信息,我收到以下错误:
Run Code Online (Sandbox Code Playgroud)Traceback (most recent call last): File "extract_test.py", line 43, in <module> response=br.open(v) File "/usr/local/lib/python2.7/dist-packages/mechanize/_mechanize.py", line 203, in open return self._mech_open(url, data, timeout=timeout) File "/usr/local/lib/python2.7/dist-packages/mechanize/_mechanize.py", line 255, in _mech_open raise response mechanize._response.httperror_seek_wrapper: HTTP Error 429: Unknown Response Code
我用time.sleep()它并且它有效,但它似乎不聪明和不可靠,有没有其他方法来躲避这个错误?
这是我的代码:
import mechanize
import cookielib
import re
first=("example.com/page1")
second=("example.com/page2")
third=("example.com/page3")
fourth=("example.com/page4")
## I have seven URL's I want to open
urls_list=[first,second,third,fourth]
br = mechanize.Browser()
# Cookie Jar
cj = cookielib.LWPCookieJar()
br.set_cookiejar(cj)
# Browser options
br.set_handle_equiv(True)
br.set_handle_redirect(True)
br.set_handle_referer(True)
br.set_handle_robots(False)
# …Run Code Online (Sandbox Code Playgroud) 我正在使用WCF实现API,规范说在某些情况下返回HTTP 429.
通常我会写:
throw new WebFaultException(HttpStatusCode.NotFound);
Run Code Online (Sandbox Code Playgroud)
但是HttpStatusCode枚举不包含429.
我显然可以演绎到枚举
throw new WebFaultException((HttpStatusCode)429);
Run Code Online (Sandbox Code Playgroud)
但是我担心这不会给调用我的API的应用程序产生正确的结果.
创建扩展HttpStatusCode并发送有效(但不支持)的HTTP状态的最佳方法是什么?
我正在尝试使用 Express NodeJS 中的以下代码向 openai API 发出请求:
import { Configuration, OpenAIApi } from "openai";
const configuration = new Configuration({
organization: "org-Fn2EqsTpiUCTKb8m61wr6H8m",
apiKey: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
});
const openai = new OpenAIApi(configuration);
async function callApi() {
const response = await openai.createCompletion({
model: "text-davinci-003",
prompt: "Say this is a test",
max_tokens: 3000,
temperature: 0,
});
console.log(response.data.choices[0].text);
}
callApi();
Run Code Online (Sandbox Code Playgroud)
问题是我不断收到错误 429 Too much requests。
这里有更多信息:
我刚刚在PHP的header()方法中发现了一个奇怪的地方,默默地将我的一些状态转换为500.由于我在各种网络搜索中没有找到提及这种行为的运气,我在这里添加它是为了拯救他人一些恶化,还要询问是否有人发现了一个比我想出的更好的解决方法(使用PHP或Zend1).
给出一个简单的PHP脚本,如:
<?php
header('HTTP/1.1 429');
echo "Too Many Requests\n";
Run Code Online (Sandbox Code Playgroud)
我希望得到类似的东西:
HTTP/1.1 429
Date: Thu, 18 Jul 2013 22:19:45 GMT
Content-Length: 11
Content-Type: text/html; charset=UTF-8
Too Many Requests
Run Code Online (Sandbox Code Playgroud)
相反,它实际上返回:
HTTP/1.1 500 Internal Server Error
Date: Thu, 18 Jul 2013 22:19:45 GMT
Content-Length: 11
Content-Type: text/html; charset=UTF-8
Too Many Requests
Run Code Online (Sandbox Code Playgroud)
除此之外,我的apache错误日志中没有事件,访问日志显示正确的状态代码(因此与发送到浏览器的内容不同):
$IP - - [18/Jul/2013:16:31:34 -0700] "GET /test/429.php HTTP/1.1" 429 11 "-" "curl/7.30.0"
Run Code Online (Sandbox Code Playgroud)
使用许多其他状态代码(如401,420,426)进行测试时,一切正常.
如果我是明确的并发送标题('HTTP/1.1 429 Too Many Requests'),一切也可以正常工作; 这将是一个有用的解决方法,除了我使用Zend Framework并且其setHttpResponseCode方法需要一个整数,它用作php的header()函数的第三个参数.
我已经发现它似乎特别适用于RFC 6585中添加的状态(请参阅https://github.com/php/php-src/pull/274),尽管我有点困惑为什么像426这样的状态工作当他们显然没有出现在5.4.14和5.4.16的源代码中(我测试过的两个版本),但是像429这样的非功能性版本.
更新:
正如答案所示,这主要是Apache问题,而不是PHP,我已相应更新了标题.最有趣的似乎是,这仅在某些版本的Apache中得到修复(旧版和新版之间没有明显的一致性).我相信有问题的上游问题在这里:https://issues.apache.org/bugzilla/show_bug.cgi?id = 44995
所以我有一个子reddits列表,我正在使用urllib打开它们.当我经历他们时,urllib最终失败了:
urllib2.HTTPError: HTTP Error 429: Unknown
Run Code Online (Sandbox Code Playgroud)
做一些研究我发现reddit通过IP限制了对服务器的请求数量:
每两秒钟发出一次请求.突发请求有一些限制,但要保持理智.一般情况下,一分钟内保持不超过30个请求.
所以我想我time.sleep()每隔10秒就会将请求限制在一个页面上.这最终也失败了.
上面的引用是从reddit API页面中获取的.我没有使用reddit API.在这一点上,我在想两件事.该限制仅适用于reddit API或urllib也有限制.
有谁知道这两件事中的哪一件?或者我如何解决这个问题?
当我开始大量使用 API 时,我的 Apache 返回 429 错误代码。API 调用由 SAP BusinessObject 生成并发送到我的“反向代理”以将 HTTP 转换为 HTTPS。反向代理通过 HTTPS 将 HTTP 请求转发到 Web 服务器。
15 次请求后,反向代理会在 Apache error.log 中返回 429 错误。这 15 个请求是在 9 分钟内提出的。
我如何配置 Apache 才能处理这种负载/流量?因为在前 15 个请求之后我还有另外 300 个请求......
反向代理配置:
NameVirtualHost *:80
ProxyRequests Off
<VirtualHost *:80>
ServerName domain.com
ServerAlias domain.com
SSLProxyEngine On
SSLProxyVerify none
SSLProxyProtocol SSLv3
ProxyPass / https://domain.com/
ProxyPassReverse / https://domain.com/
<Directory proxy:*>
Order Deny,Allow
Allow from all
</Directory>
</VirtualHost>
Run Code Online (Sandbox Code Playgroud) 我正在使用一个 api,如果您在 5 分钟内点击它超过 250 次,它将返回 429,请求太多,响应。计数每五分钟重置一次,所以我一直这样处理:
try
{
return request.GetResponse();
}
catch (Exception e)
{
if (e.Message.Contains("429"))
{
System.Threading.Thread.Sleep(5 * 60 * 1000);
return request.GetResponse();
}
else
{
throw new Exception(e.Message);
}
}
Run Code Online (Sandbox Code Playgroud)
这是处理这种情况的正确方法吗?
我在使用 Selenium WebDriver.chromedriver 获取 json 结果数据时遇到问题,服务器将响应 http 状态代码 429 太多请求。但是当我直接使用 chrome 来获取这个 url " https://shop.coles.com.au/search/resources/store/20501/productview/2364711P " 时,它会正常工作。我认为服务器端有一些验证逻辑,但是如何交叉,请帮助非常感谢~
我明白了为什么下面这个js代码被服务器阻止检测我使用webdriver然后阻止我,然后不创建cookies ..
"use strict";
!function() {
function e(e) {
var r = (void 0 !== e.stack ? e.stack : "").replace(/"/g, '"')
, t = {
stack: r,
message: e.message,
name: e.name
};
(new Image).src = l + "/error?e=" + encodeURIComponent(JSON.stringify(t)),
console.log("Error", "\n name: " + t.name, "\n message: " + t.message, "\n stack: " + t.stack)
}
function r(e) {
return "true" === …Run Code Online (Sandbox Code Playgroud) 我今天向您求助是因为我对硒有疑问。我的目标是制作一个完全自动化的机器人,它可以创建一个包含解析详细信息(邮件、通行证、出生日期...)的帐户。到目前为止,我已经几乎创建了该机器人(我只需要访问 Gmail 并获得确认)代码)。
我的问题就在这里,因为我已经尝试了很多东西,我有一个Failed to load resource: the server responded with a status of 429 ()
所以,我猜,Instagram 阻止了我。我怎样才能绕过这个?