使用 Python 调用带有 urllib 或 urllib2 的 API 3+
Calling an API with urllib or urllib2 using Python 3+
正在尝试调用我的 Azure ML api,但我遇到了 urllib 问题。我使用 Python 3+,因此应该使用 urllib 而不是 urllib2,但我对 urllib 中发生的事情以及为什么我收到错误消息感到困惑。
完整脚本:
import urllib2
# If you are using Python 3+, import urllib instead of urllib2
import json
data = {
"Inputs": {
"input1":
{
"ColumnNames": ["x", "x", "x"],
"Values": [ ["x", "x", "x"]
}, },
"GlobalParameters": {
}
}
body = str.encode(json.dumps(data))
url = 'https://ussouthcentral.services.azureml.net/workspaces/xxxxxxxxxxxxxxxxxxx/services/xxxxxxxxxxxxxxxxxxxxx/execute?api-version=2.0&details=true'
api_key = 'xxxxxx'
headers = {'Content-Type':'application/json', 'Authorization':('Bearer '+ api_key)}
req = urllib.request.Request(url, body, headers)
try:
response = urllib.request.urlopen(req)
result = response.read()
print(result)
except urllib2.HTTPError, error:
print("The request failed with status code: " + str(error.code))
print(error.info())
print(json.loads(error.read()))
在 API 的文档中说我应该使用 urllib.request
。
问题似乎是这一行,所以我尝试更改它:
except urllib2.HTTPError, error:
有了这个:
except urllib.request.HTTPError, error:
或者用这个:
except urllib.HTTPError, error:
但是没有效果
我收到的错误信息是:
File "<ipython-input-14-d5d541c5f201>", line 37
except urllib2.HTTPError, error:
^
SyntaxError: invalid syntax
(第37行就是上面描述的"except")
我也试图完全删除第 37 行,但它导致了这个错误:
File "<ipython-input-15-6910885cb679>", line 43
print(json.loads(error.read()))
^
SyntaxError: unexpected EOF while parsing
意外的 EOF 通常是当我错过关闭一个 ( 或一个 { 但我仔细检查并找不到它。我希望有人能够帮助我找到问题。
错误信息很清楚:存在语法错误(所以这个问题与urllib
完全无关)。用另一行更改冲突行,它应该可以工作:
...
except urllib2.HTTPError as error:
# your error handling routine
此外,请查看 Python 文档,了解如何处理异常 https://docs.python.org/2/tutorial/errors.html#handling-exceptions
正在尝试调用我的 Azure ML api,但我遇到了 urllib 问题。我使用 Python 3+,因此应该使用 urllib 而不是 urllib2,但我对 urllib 中发生的事情以及为什么我收到错误消息感到困惑。
完整脚本:
import urllib2
# If you are using Python 3+, import urllib instead of urllib2
import json
data = {
"Inputs": {
"input1":
{
"ColumnNames": ["x", "x", "x"],
"Values": [ ["x", "x", "x"]
}, },
"GlobalParameters": {
}
}
body = str.encode(json.dumps(data))
url = 'https://ussouthcentral.services.azureml.net/workspaces/xxxxxxxxxxxxxxxxxxx/services/xxxxxxxxxxxxxxxxxxxxx/execute?api-version=2.0&details=true'
api_key = 'xxxxxx'
headers = {'Content-Type':'application/json', 'Authorization':('Bearer '+ api_key)}
req = urllib.request.Request(url, body, headers)
try:
response = urllib.request.urlopen(req)
result = response.read()
print(result)
except urllib2.HTTPError, error:
print("The request failed with status code: " + str(error.code))
print(error.info())
print(json.loads(error.read()))
在 API 的文档中说我应该使用 urllib.request
。
问题似乎是这一行,所以我尝试更改它:
except urllib2.HTTPError, error:
有了这个:
except urllib.request.HTTPError, error:
或者用这个:
except urllib.HTTPError, error:
但是没有效果
我收到的错误信息是:
File "<ipython-input-14-d5d541c5f201>", line 37
except urllib2.HTTPError, error:
^
SyntaxError: invalid syntax
(第37行就是上面描述的"except")
我也试图完全删除第 37 行,但它导致了这个错误:
File "<ipython-input-15-6910885cb679>", line 43
print(json.loads(error.read()))
^
SyntaxError: unexpected EOF while parsing
意外的 EOF 通常是当我错过关闭一个 ( 或一个 { 但我仔细检查并找不到它。我希望有人能够帮助我找到问题。
错误信息很清楚:存在语法错误(所以这个问题与urllib
完全无关)。用另一行更改冲突行,它应该可以工作:
...
except urllib2.HTTPError as error:
# your error handling routine
此外,请查看 Python 文档,了解如何处理异常 https://docs.python.org/2/tutorial/errors.html#handling-exceptions