Я делаю запрос get () на URL: https://southcentralus.azuredatabricks.net/api/2.0/clusters/get?cluster_id=020*-******-******* через скрипт python, как показано ниже:
import requests,sys
print(sys.getdefaultencoding())
session = requests.Session()
print(session.headers)
headers = {'Authorization':'Bearer dapi***************************'}
data=requests.get("https://southcentralus.azuredatabricks.net/api/
2.0/clusters/get?cluster_id = 020*-******-*******",
headers=headers).text
print(data)
if isinstance(data, str):
print("ordinary string")
elif isinstance(data, unicode):
print("unicode string")
Выполняя приведенный выше код на python 3.6.7, используяв простое IDE, я получаю следующую ошибку, как показано ниже:
<code>utf-8
{'User-Agent': 'python-requests/2.21.0', 'Accept-Encoding': 'gzip,
deflate', 'Accept': '*/*', 'Connection': 'keep-alive'}
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/>
<title>Error 403 </title>
</head>
<body>
<h2>HTTP ERROR: 403</h2>
<p>Problem accessing /api/2.0/clusters/get. Reason:
<pre> Invalid access token.
обычная строка
Когда я передаю тот же URL в Postman вместе с ключом авторизации, он проходит и выдает правильный вывод.Ниже приводится вывод:
{"cluster_id":"020*-******-
*******","spark_context_id":66357**********,"cluster_name":
"*********","spark_version":"********","spark_conf":
{"spark.databricks.delta.preview.enabled":"true"},"node_type_id":
"S**********","driver_node_type_id":"***********",
"autotermination_minutes":20,"enable_elastic_disk":true,
"cluster_source":"UI","state":"TERMINATED","state_message":"Inactive ------
------------------------------------------------ and so on.....}
Выходные заголовки Postman следующие:
Server →openresty/1.11.2.2
Content-Type →application/json;charset=utf-8
Connection →keep-alive
X-Databricks-Debug-Initial-Route →random
X-Databricks-Debug-Attempt-0 →https://svc-cons-
mix.production.svc.cluster.local OK! status=200 data_sent=true
X-Databricks-Reason-Phrase →OK
Content-Length →1085
Vary →Accept-Encoding, User-Agent
X-Databricks-Route-To →https://cons-webapp-0.cons-webapp-
..................... and so on
Единственное отличие, которое я вижу здесь, заключается в типе Content, который мы получаем из pythonпрограмма и через почтальон.Я перепробовал все возможные решения для предоставления User-Agent в заголовках в коде Python, который до сих пор не удается.
Кроме того, один и тот же код передается и на других системах, и на других пользователях, не зная, почему он не работает только в моей системе.
Кто-нибудь может мне помочь решить проблему?