Get () запрашивает URL-адрес с ошибкой в ​​python 3.6.7, тогда как тот же URL-адрес передается в Postman - PullRequest
0 голосов
/ 07 февраля 2019

Я делаю запрос 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, который до сих пор не удается.

Кроме того, один и тот же код передается и на других системах, и на других пользователях, не зная, почему он не работает только в моей системе.

Кто-нибудь может мне помочь решить проблему?

...