【问题标题】:Unable to create request to API with python requests. Even when all headers are correct无法使用 python 请求创建对 API 的请求。即使所有标题都正确
【发布时间】:2021-05-13 06:35:44
【问题描述】:

我正在尝试使用 python 获取请求https://api.dex.guru/v1/tokens/0x7060d3F1CC70A07f4768560B9D9B692ac29244dE。我尝试了很多不同的东西,但它们都以禁止 403 错误作为响应。我已经尝试了所有我能想到的方法,但没有成功。

目前我的这个请求的代码如下所示:

headers = {
    'authority': 'api.dex.guru',
    'cache-control': 'max-age=0',
    'sec-ch-ua': '^\\^',
    'sec-ch-ua-mobile': '?0',
    'upgrade-insecure-requests': '1',
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36',
    'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
    'sec-fetch-site': 'none',
    'sec-fetch-mode': 'navigate',
    'sec-fetch-user': '?1',
    'sec-fetch-dest': 'document',
    'accept-language': 'en-US,en;q=0.9',
    'cookie': (cookies are here)
}

response = requests.get('https://api.dex.guru/v1/tradingview/symbols?symbol=0x7060d3f1cc70a07f4768560b9d9b692ac29244de-bsc', headers=headers)

然后我打印出响应,这是一个 403 错误。请帮忙,我需要这个数据来做一个项目。

【问题讨论】:

  • 在 API 源尝试端点,看看是否有效:api.dex.guru

标签: python python-requests http-headers python-requests-html


【解决方案1】:

下午好。

在 Reddit 上另一个用户的帮助下,我设法让它工作。

让这个 API 调用工作的关键是使用 cloudcraper 模块:-

import cloudscraper
scraper = cloudscraper.create_scraper()  # returns a CloudScraper instance
print(scraper.get("https://api.dex.guru/v1/tokens/0x8076C74C5e3F5852037F31Ff0093Eeb8c8ADd8D3-bsc").text)

这给了我一个带有预期 JSON 内容的 200 响应(用你的 URL 替换我上面的 URL,你应该得到预期的 200 响应)。

非常感谢 吉米

【讨论】:

    【解决方案2】:

    我自己尝试过解决这个问题,您的网站似乎有某种 DDOS 保护,可以防止 Cloudflare 阻止这些 API 调用。无论如何,我都不是 Python 或标头方面的专家,因此您可能会提供一些东西来处理它。但是我查看了他们的website,似乎 API 仍在开发中。最后,我得到了 503 错误,并且我能够通过浏览器正常访问 API。如果您不介意解释某些 cookie/标头在做什么,很高兴对此进行更多修改。

    【讨论】:

      【解决方案3】:

      尝试检查响应的正文(response.contentresponse.text),因为这可能会让您更清楚地了解您被阻止的原因。

      对我来说,他们似乎根据user-agent 进行了一些过滤。我确实获得了 Cloudflare DoS 保护页面(例如带有 HTTP 503 响应)。使用表明 JavaScript 不起作用的用户代理字符串,我确实得到了 HTTP 200:

      headers = {"User-Agent": "HTTPie/2.4.0"}
      r = requests.get("https://api.dex.guru/v1/tokens/0x7060d3F1CC70A07f4768560B9D9B692ac29244dE", headers=headers)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-09-04
        • 2018-07-29
        • 2020-09-17
        • 1970-01-01
        • 1970-01-01
        • 2017-03-13
        • 2014-08-09
        • 2022-01-14
        相关资源
        最近更新 更多