微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

是否有绕过 CoinGecko API 安全检查的解决方法?

如何解决是否有绕过 CoinGecko API 安全检查的解决方法?

我在工作时运行我的代码,它运行得很顺利,但在不同的网络(家庭 WiFi)上,我在访问 CoinGecko V3 API 时不断收到 403 错误。可以观察到,在私人浏览器上访问 API(以测试它)会提示安全检查 (hCaptcha) 才能继续。

https://api.coingecko.com/api/v3/coins/bitcoin/market_chart?vs_currency=usd&days=30

with requests.get(url) as source:
    print(source.status_code)

我也尝试过 pycoingecko(用于检查),但仍然返回类似的错误

>>> from pycoingecko import CoinGeckoAPI
>>> cg = CoinGeckoAPI()
>>> cg.get_coin_market_chart_by_id(id='bitcoin',vs_currency='usd',days=1)
Traceback (most recent call last):
  File "<stdin>",line 1,in <module>
  File "C:\Users\...\python39\lib\site-packages\pycoingecko\utils.py",line 12,in input_args
    return func(*args,**kwargs)
  File "C:\Users\...\python39\lib\site-packages\pycoingecko\api.py",line 169,in get_coin_market_chart_by_id
    return self.__request(api_url)
  File "C:\Users\...\python39\lib\site-packages\pycoingecko\api.py",line 29,in __request
    response.raise_for_status()
  File "C:\Users\...\python39\lib\site-packages\requests\models.py",line 941,in raise_for_status
    raise HTTPError(http_error_msg,response=self)
requests.exceptions.HTTPError: 403 Client Error: Forbidden for url: https://api.coingecko.com/api/v3/coins/bitcoin/market_chart?vs_currency=usd&days=1

我猜 Cloudflare 怀疑我的网络活动,但我当然使用 Python 脚本来访问 API,这很明显。是否有通过安全检查的解决方法

解决方法

我可以在命令行上复制对端点的调用:

curl -vv -H "user-agent: C" https://api.coingecko.com/api/v3/coins/bitcoin/market_chart?vs_currency=USD&days=30

-vv - 额外的详细日志记录 - 显示来自服务器的请求/响应的详细信息

-H - 设置 HTTP 标头

user-agent: 标头设置为空白时,我没有收到任何响应。如果我将该值设置为任何非空值,例如 CChromeChrome/91.0.0,它会起作用。

如果您可以在 python 中复制相同的内容,您应该得到相同的结果... HTTP 是一种无状态协议。如果它不起作用,那就是别的东西在起作用。

,

就像 CoinGecko 文档中所说的那样,每分钟尝试执行 50 多个请求,大约 200 次之后,我开始出错

// addon.cpp

#include "addon.h"
#include "foo.h"

Napi::Number addon::run_pipeline_wrapped(const Napi::CallbackInfo &info)
{
  Napi::Env env = info.Env();
  cStart();
}

Napi::Number addon::kill_pipeline_wrapped(const Napi::CallbackInfo &info)
{ 
  Napi::Env env = info.Env();
  cStop();
}

所以您看到的错误是特定活动的结果。

在你的情况下,我想唯一的方法是使用网络代理服务器或从一些远程服务器(如 AWS EC2 实例)运行解析,这很便宜并且可以用于解析。

,

我认为使用 scraperapi.com 是一个很好的解决方法。在支付之前,您会收到数千个请求以查看它是否有效,并且设置起来非常容易 + 旨在处理这样的事情,您可能会收到验证码/阻止等。

刚刚测试过,对我来说工作正常:

import requests
payload = {'api_key': 'YOUR API KEY','url': 'https://api.coingecko.com/api/v3/coins/bitcoin/market_chart?vs_currency=usd&days=30'}
with requests.get('http://api.scraperapi.com',params=payload) as source:
    print(source.status_code)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?