表单识别器 API 的正确端点是什么?

What is the Correct Endpoint for the Form Recognizer API?

有关使用 Azure 表单识别器的文档似乎不清楚。发送我的请求的正确端点是什么?

我正在使用 python 并已按照文档使用表单识别器的预建收据模型,但没有获得预期的输出。我不确定我是否使用了正确的端点。我尝试了两件事:

  1. 阅读此 tutorial,它表明我需要在我的资源概述页面中查找 <ENDPOINT>。在我的例子中是:formextractor.cognitiveservices.azure.com。所以我尝试了这个:
import http.client, urllib.request, urllib.parse, urllib.error, base64

params = urllib.parse.urlencode({
    })

# key = '...'
headers = {
    # Request headers
    'Content-Type': 'application/json',
    'Ocp-Apim-Subscription-Key': key,
}

source = r"https://www.w3.org/WAI/WCAG20/Techniques/working-examples/PDF20/table.pdf"
body = {"url":source}
body = json.dumps(body)

try:
    conn = http.client.HTTPSConnection('formextractor.cognitiveservices.azure.com')
    conn.request("POST", "/formrecognizer/v1.0-preview/prebuilt/receipt/asyncBatchAnalyze?s" % params, f"{body}", headers)
    response = conn.getresponse()
    data = response.read()
    operationURL = "" + response.getheader("Operation-Location")
    print ("Operation-Location header: " + operationURL)
    conn.close()
except Exception as e:
    print(e)

这个returns:

[Errno 8] nodename nor servname provided, or not known
  1. 但是在 API Docs 中,ENDPOINT 已经固定为 westeurope.api.cognitive.microsoft.com,这是我的资源所在的位置。所以我尝试了这个:
# ... same headers, body and params as before
try:
    conn = http.client.HTTPSConnection('westeurope.api.cognitive.microsoft.com')
    conn.request("POST", "/formrecognizer/v1.0-preview/prebuilt/receipt/asyncBatchAnalyze?%s" % params, f"{body}", headers)
    response = conn.getresponse()
    data = response.read()
    operationURL = "" + response.getheader("Operation-Location")
    print ("Operation-Location header: " + operationURL)
    conn.close()
except Exception as e:
    print("[Errno {0}] {1}".format(e.errno, e.strerror))

在我看到的地方输出一个 URL:

{"error":{"code":"401","message": "Access denied due to invalid subscription key or wrong API endpoint. Make sure to provide a valid key for an active subscription and use a correct regional API endpoint for your resource."}}

我确定我使用的是正确的密钥。但无论如何,两者似乎都不起作用。你可以帮帮我吗?谢谢。

您提到的初始文档似乎具有误导性。你可以在 Azure 门户的资源概述中找到资源的终结点。我的样本:

Form Recognizer API(在撰写本答案时)托管在以下 Azure 区域:

  • 美国西部 2 - westus2.api.cognitive.microsoft.com
  • 西欧 - westeurope.api.cognitive.microsoft.com

所以在我的例子中是西欧,正如你提到的,它在你的资源上是一样的。一旦你得到它,你就会得到一个 401 Unauthorized

几种可能性:

  • 你传递 header 的方式有误(错误的键名,错误的键值),但根据你上面的代码看起来没问题(但我不习惯 Python)
  • 您的资源与您查询的端点不在同一区域(请仔细检查)
  • 您使用的是正确的根,但是您调用它的方式有问题

检查完区域/键值后,是否可以从查询中删除 ?%s"%paramsAnalyze Receipt 方法在查询字符串中没有参数(给定 documentation