首页 > 解决方案 > 413“请求实体太大”使用 Python 和 postcodes.io API

问题描述

我有大量的邮政编码,我想使用“postCodes.io”API,它在 python 中为给定的 postCode 提供经度和高度数据。

当我只请求 3-4 个邮政编码时,它不会给出错误,但是当我想要大量数据时,它会给出“413 错误”。我应该如何使用 python 等待所需的时间并再次尝试使用 API?

或者如果我在本地机器上下载 API 并使用 docker 运行,是否可以更改此请求限制? https://postcodes.io/docs#Install-notes

这是我的代码:

import requests
import json
import pandas as pd

file = 'DataSets/deneme.csv'
df = pd.read_csv(file)

postCodeArray = []

for postCode in df['PostCode']:
    postCodeArray.append(postCode)

parameters = {
    "postcodes": json.dumps(postCodeArray)   #should be used.["OX49 5NU", "M32 0JG", "NE30 1DP"]
}

response = requests.post("https://api.postcodes.io/postcodes", data=parameters)
data = response.json()

文件 = deneme.csv 看起来像这样:

Transaction Unique Identifier,PostCode,Town/City
{8A78B2B0-5D07-5CB0-E053-6B04A8C0F504},SG5 1RT,HITCHIN
{8A78B2B0-5D09-5CB0-E053-6B04A8C0F504},AL3 4GD,ST ALBANS
{8A78B2B0-5D0A-5CB0-E053-6B04A8C0F504},WD25 0NF,WATFORD
{8A78B2B0-5D0C-5CB0-E053-6B04A8C0F504},WD7 7NN,RADLETT
{8A78B2B0-5D0D-5CB0-E053-6B04A8C0F504},SG6 4LU,LETCHWORTH GARDEN CITY
{8A78B2B0-5D0E-5CB0-E053-6B04A8C0F504},SG9 9JH,BUNTINGFORD
{8A78B2B0-5D11-5CB0-E053-6B04A8C0F504},WD7 7JA,RADLETT
{8A78B2B0-5D12-5CB0-E053-6B04A8C0F504},SG12 9DZ,WARE
{8A78B2B0-5D17-5CB0-E053-6B04A8C0F504},SG6 3BA,LETCHWORTH GARDEN CITY
{8A78B2B0-5D18-5CB0-E053-6B04A8C0F504},SG6 3BA,LETCHWORTH GARDEN CITY
{8A78B2B0-5D1B-5CB0-E053-6B04A8C0F504},WD17 4UH,WATFORD
{8A78B2B0-5D1C-5CB0-E053-6B04A8C0F504},HP2 7QF,HEMEL HEMPSTEAD
{8A78B2B0-5D2E-5CB0-E053-6B04A8C0F504},HP2 4BA,HEMEL HEMPSTEAD

标签: pythonapidockerhttp-posthttp-status-code-413

解决方案


这是因为您要从整个列表中发送一个庞大的请求。相反,您可以发送多个较小的请求,每个请求带有几个邮政编码,并将每个请求的输出附加到列表中。

HTTP 错误 413“请求实体太大”不是由速率限制引起的,而是由单个请求的大小引起的。您可以尝试向许多服务器发送大量 GET 或 POST 请求并获得相同的错误消息。

尝试一次只查询 3-4 个邮政编码(或找到最大限制并每次请求该数字)。


推荐阅读