表单识别器 API 的正确端点是什么?
What is the Correct Endpoint for the Form Recognizer API?
有关使用 Azure 表单识别器的文档似乎不清楚。发送我的请求的正确端点是什么?
我正在使用 python 并已按照文档使用表单识别器的预建收据模型,但没有获得预期的输出。我不确定我是否使用了正确的端点。我尝试了两件事:
- 阅读此 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
- 但是在 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"%params
? Analyze Receipt
方法在查询字符串中没有参数(给定 documentation)
有关使用 Azure 表单识别器的文档似乎不清楚。发送我的请求的正确端点是什么?
我正在使用 python 并已按照文档使用表单识别器的预建收据模型,但没有获得预期的输出。我不确定我是否使用了正确的端点。我尝试了两件事:
- 阅读此 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
- 但是在 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"%params
? Analyze Receipt
方法在查询字符串中没有参数(给定 documentation)