【问题标题】:python request.get API arguments, headers, parameters - confusionpython request.get API 参数、标头、参数 - 混淆
【发布时间】:2025-12-22 15:55:06
【问题描述】:

对于 API 的 Python 请求,我对 URL 参数、参数和 request.get() 参数感到困惑,即使在阅读了 Python 和 API 文档之后也是如此。我只想得到带有“名字”的狗:“秋田”。

以下代码适用于 5 条记录的限制,但返回的记录是随机的,而不仅仅是“Akita”(我知道存在)。我尝试了许多引号、大括号、字典格式、预写字符串等的排列。全部都没有返回记录,所有记录或语法都失败。

response_dog = requests.get("https://api.thedogapi.com/v1/images/search?limit=5", params={'name': 'Akita'})
for current_dog in response_dog.json():
    print("\n",current_dog)

输出是 5 条随机狗;想要的只是“名字”的一只狗:“秋田”

【问题讨论】:

    标签: python filter parameters request arguments


    【解决方案1】:

    如果您需要特定犬种的信息,为什么要使用为随机犬产生信息的 API 端点?

    我认为您正在寻找的是: https://docs.thedogapi.com/api-reference/breeds/breeds-search#send-a-test-request

    文档告诉您如何制定您的请求,包括标头、查询字符串参数和端点 URL:

    import requests
    
    url = "https://api.thedogapi.com/v1/breeds/search"
    
    params = {
        "q": "akita"
    }
    
    headers = {
        "x-api-key": "YOUR_API_KEY"
    }
    
    response = requests.get(url, params=params, headers=headers)
    response.raise_for_status()
    
    print(response.json()[0]["temperament"])
    

    注意:我没有测试过这个,因为我没有 API 密钥,但根据文档它应该可以工作。

    【讨论】:

    • 谢谢。我忽略了 /v1 之后有不同的选项。
    • 但我仍然不明白该网站如何知道 {"q":"Akita"} 提供“Akita”作为名称字段的搜索字符串,而不是来源字段或国家代码字段。此页面上似乎有十几个字段:docs.thedogapi.com/api-reference/breeds/breeds-search。但它们都不是'q'。如果我想在 'weight' 键中的 'imperial' 键中搜索值 '65 - 115' 怎么办?谢谢。
    • @PlayingwithGAS 我认为您可能误解了文档。文档所指的“架构”(id、名称、气质、life_span 等)是服务器响应中包含的内容。架构定义了您可以在响应 JSON 中看到的键值对的键。您不使用这些键来制定您的请求 - 它们仅与响应相关。我知道使用查询字符串参数q 的唯一原因是文档告诉我要使用它:q [string] - Part of the name of the breed to search for
    • 这个特定的 API 端点碰巧只接受一个查询字符串参数 q,您可以使用它来搜索品种。例如,您不能将此查询字符串参数与此端点一起使用以按体重或身高进行搜索。
    • 重点是:如果我使用 q=poodle 向此端点发出请求,则 JSON 响应包含四个字典的列表,其中四个 name 键中的每一个键(来自schema) 映射到以下不同的值:PoodlePoodle (Miniature)Poodle (Toy)Toy Poodle。不要将架构中的 name 键与 q 查询字符串参数混淆。 q 只是您正在寻找的品种(或品种的全名)的子字符串。响应包含符合您的搜索条件的所有品种。