Python:从 URL 请求大负载

Python: Request large payload from URL

我正在尝试使用 Python 从 URL 获取数据。我使用的代码是这样的:

response = requests.get(
                url="https://api.covalenthq.com/v1/"+Chain_id+"/address/"+Address+"/transactions_v2/?    key=API_KEY",
            headers={
                "Authorization": "Basic AUTHORIZATION",
            },
        )
result = response.json()
result = result['data']['items']

所以我在 URL 中输入 Chain_id 和钱包地址,以获取该对的所有交易。但是,我最多只能得到最新的 100 笔交易。有没有办法获得所有交易?有没有我可以添加到 requests 以获取所有数据点的参数?

例如,将这个钱包地址0x60b86AF869f23aEb552fB7F3CaBD11B829f6Ab2F放入etherscan.io(https://etherscan.io/address/0x60b86af869f23aeb552fb7f3cabd11b829f6ab2f),可以看到有超过51000笔交易,但我只得到最新的100笔。

这不是 requests 的问题,这是 API 本身的限制。

查看 API docs 他们说每页有 100 个请求的限制。

正如@rodrigo-cava 所说,您可以检索 100 个项目(默认值)以供请求。 这意味着您必须获取页面才能收集所有结果。

解决方案可能如下:

CHAIN_ID = "your chain id"
ADDRESS = "your address"
API_KEY = "your api key"

response_list = list()   

url = f"https://api.covalenthq.com/v1/{CHAIN_ID}/address/{ADDRESS}/transactions_v2/?key={API_KEY}"
response = requests.get(url, headers={"Authorization": "Basic AUTHORIZATION"}).json()

while response["pagination"]["has_more"]:
    page_number = response["pagination"]["page_number"] + 1
    url = f"https://api.covalenthq.com/v1/{CHAIN_ID}/address/{ADDRESS}/transactions_v2/?page-number={page_number}&page-size=100&key={API_KEY}"

    response = requests.get(url, headers={"Authorization": "Basic AUTHORIZATION"})
    if not response.ok:
        raise Exception("Error during the request")
    
    response_list.append(response.json())