1

所以,这里是 Databricks 中 Jobs API 调用的链接

一切都使用请求在 Python 中工作。例如,工作创建和工作列表都有效

import requests
proxy= "http://127.0.0.1:8888"
access_token="tokenabc"

proxies = {
"https": proxy,
}


header_read = {
'Authorization': "Bearer " + access_token,
'Accept': "application/scim+json"
}

#list jobs
init_get=requests.get('https://databricksworkspaceid.azuredatabricks.net/api/2.0/jobs/list', headers=header_read, proxies=proxies)

#create job
init_post=requests.post('https://databricksworkspaceid.azuredatabricks.net/api/2.0/jobs/create', headers=header_read, proxies=proxies,verify=False,json=job_payload)

然而,奇怪的是,在 Powershell 中,只有作业创建有效,作业列表失败。

#this works
Invoke-RestMethod -Uri 'https://databricksworkspaceid.azuredatabricks.net/api/2.0/jobs/create' -Headers @{ 'Authorization' = "Bearer $bearertoken" } -Method Post -Body $content -ContentType  'application/json'

#this does not work
Invoke-WebRequest -Uri 'https://databricksworkspaceid.azuredatabricks.net/api/2.0/jobs/list' -Headers @{ 'Authorization' = "Bearer $bearertoken" } -Method Get

#RestMethod also does not work
Invoke-RestMethod -Uri 'https://databricksworkspaceid.azuredatabricks.net/api/2.0/jobs/list' -Headers @{ 'Authorization' = "Bearer $bearertoken" } -Method Get

我也尝试在这些上设置内容类型,但没有任何帮助。此外,显式设置代理(提琴手)也无济于事。

-proxy "http://127.0.0.1:8888"

但也不应该是代理,因为 post 方法有效。

我只是不断收到一个错误

Invoke-WebRequest : The underlying connection was closed: An unexpected error occurred on a send.
At line:22 char:5
+     Invoke-WebRequest -Uri 'https://databricksworkspaceid.azuredatabricks.net/ap ...
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-WebRequest], WebException
    + FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeWebRequestCommand

或者在 RestMethod 的情况下

Invoke-RestMethod : The underlying connection was closed: An unexpected error occurred on a send.
At line:22 char:5
+     Invoke-RestMethod -Uri 'https://databricksworkspaceid.azuredatabricks.net/ap ...
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-RestMethod], WebException
    + FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeRestMethodCommand

如果 Powershell 中的一切都失败了,我本可以理解,但是 post 方法(创建作业)有效,所以不确定为什么在 Get 请求而不是 post 的情况下连接会被终止。

通过一些论坛帖子,我也尝试了以下但无济于事-

[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12

有谁知道我做错了什么/错过了什么?莫名其妙地看到在 python 中工作,但只是在 Powershell 中的一部分。

4

1 回答 1

2

所以,我终于找到了答案。基本上2件事:

  1. 必须在点击列表端点之前执行此操作(奇怪的是,正如我所说 - 创建端点)有效

基本上允许 TLS、TLS1.1 和 TLS1.2

[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls -bor [Net.SecurityProtocolType]::Tls11 -bor [Net.SecurityProtocolType]::Tls12
  1. 只做第1点没有用。我还必须使用“提升”的 powershell 会话。基本上使用“以管理员身份运行”运行包含第 1 步的脚本。
于 2020-09-20T18:17:15.180 回答