首页 > 解决方案 > 为什么 api 调用在 windows 和 linux 中返回不同的东西?

问题描述

我正在尝试从网站 api 中检索一些数据。它在我的 Windows 个人机器上运行良好,但是当我在 GCP 中使用另一个带有 Ubuntu 的 VM 时,它崩溃了

这是我的代码:

import requests

url = 'https://www.buda.com/api/v2/markets/ETH-COP/order_book'
answer = requests.get(url)
print(url.status_code)
print(url.txt)

在 Windows 中,这是输出

200
'{"order_book":{"asks":[["9300974.95","0.017059589"],["9300988.98","0.02104"],["9301000.0","0.0456"],["9304101.0","0.035"],["9305121.0","0.057411325"],["9488101.0","0.025"],["9491000.0","0.025"],["9596121.0","0.03"],["9766963.93","0.054399644"],["9887041.7","0.000146739"],["9887846.1","0.086726678"],["10000000.0","0.217447367"],["10042060.0","0.01"],["10102060.0","0.01248862"],["10149880.0","0.042914"],["10194000.0","0.095735001"],["10200000.0","0.020424454"]}}

这是带有 Ubuntu 的 GCP 虚拟机中的输出

[503]
<!DOCTYPE HTML>
<html lang="en-US">
<head>
  <meta charset="UTF-8" />
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1" />
  <meta name="robots" content="noindex, nofollow" />
  <meta name="viewport" content="width=device-width,initial-scale=1" />
  <title>Just a moment...</title>
  <style type="text/css">
    html, body {width: 100%; height: 100%; margin: 0; padding: 0;}
    body {background-color: #ffffff; color: #000000; font-family:-apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, "Helvetica Neue",Arial, sans-serif; font-size: 16px; line-height: 1.7em;-webkit-font-smoothing: ant
ialiased;}
    h1 { text-align: center; font-weight:700; margin: 16px 0; font-size: 32px; color:#000000; line-height: 1.25;}
more html...

我怎样才能解决这个问题?

标签: pythonapipython-requests

解决方案


该网站buda.com受 CloudFlare 保护。

CloudFlare 允许来自您的 Windows 机器的网络连接的流量并拒绝来自您的 GCP VM 的流量。这可能是因为 CloudFlare 信任您的 Windows 机器的公共 IP 地址,但将您的 GCM VM 的 IP 与自动网络爬虫或其他不受欢迎的流量相关联。

如果您想buda.com通过计算机程序访问,则需要通过 CloudFlare 或 buda.com 信任的 IP 地址进行连接。

或者,使用支持 JavaScript 的网络浏览器的人有时可以填写验证码并被允许继续访问受保护的网站。


推荐阅读