与受密码保护的 Jupyter 交互 /api
Interact with password protected Jupyter /api
一位朋友正在尝试 运行 script 检查哪些笔记本使用的内存最多,但他们的服务器受密码保护。我正在尝试弄清楚如何使用 urllib2
配置身份验证,因为我不相信有用户名,只有密码。
在深入研究笔记本代码并通过反复试验后,我想出了如何做到这一点(我转而使用 requests
)。
我不能保证这是最好的方法,但它确实对我有用。我实际上在代码的其他地方设置了我的变量,但为了完整性而包含在这里
import requests
hostname = '127.0.0.1'
port = '8888'
password = 'mypassword'
base_url = 'http://{0}:{1}/'.format(hostname, port)
h = {}
if password:
r = requests.post(base_url + 'login', params={
'password': password
})
h = r.request.headers
sessions = requests.get(base_url + 'api/sessions', headers=h).json()
我相信这是可行的,因为当您点击 /login
端点时,它会使用正确的 headers 集重定向您。我想 requests
保留了重定向的 headers,因此我们可以将它们重新用于其他调用。只提取 cookie 并使用它们可能会更好,但这目前有效:)
@aiguofer 的回答对我不起作用,因为 jupyter 现在在 cookie 中使用“_xsrf”。以下为我唤醒:
s = requests.Session()
url='http://127.0.0.1:8888/login/'
resp=s.get(url)
xsrf_cookie = resp.cookies['_xsrf']
params={'_xsrf':xsrf_cookie,'password': password}
s.post(url, data=params)
之后s
就可以调用api了
新版本似乎有一些变化。 url '/login' 对我不起作用,我需要添加 next
参数
url='http://localhost:8050/login?next=%2F'
对于登录请求。其余的就像
我发现在使用 jupyter 时 api 上传文件响应 403,
需要加上“X-XSRFToken”header才能解决..
data= json.dumps({
"name": "test.jpg",
"path": "path",
"type":"file",
"format": "base64",
"content": "base64 data"
})
headers["X-XSRFToken"] = xsrf_cookie
s.put(url, data=data, headers=headers)
一位朋友正在尝试 运行 script 检查哪些笔记本使用的内存最多,但他们的服务器受密码保护。我正在尝试弄清楚如何使用 urllib2
配置身份验证,因为我不相信有用户名,只有密码。
在深入研究笔记本代码并通过反复试验后,我想出了如何做到这一点(我转而使用 requests
)。
我不能保证这是最好的方法,但它确实对我有用。我实际上在代码的其他地方设置了我的变量,但为了完整性而包含在这里
import requests
hostname = '127.0.0.1'
port = '8888'
password = 'mypassword'
base_url = 'http://{0}:{1}/'.format(hostname, port)
h = {}
if password:
r = requests.post(base_url + 'login', params={
'password': password
})
h = r.request.headers
sessions = requests.get(base_url + 'api/sessions', headers=h).json()
我相信这是可行的,因为当您点击 /login
端点时,它会使用正确的 headers 集重定向您。我想 requests
保留了重定向的 headers,因此我们可以将它们重新用于其他调用。只提取 cookie 并使用它们可能会更好,但这目前有效:)
@aiguofer 的回答对我不起作用,因为 jupyter 现在在 cookie 中使用“_xsrf”。以下为我唤醒:
s = requests.Session()
url='http://127.0.0.1:8888/login/'
resp=s.get(url)
xsrf_cookie = resp.cookies['_xsrf']
params={'_xsrf':xsrf_cookie,'password': password}
s.post(url, data=params)
之后s
就可以调用api了
新版本似乎有一些变化。 url '/login' 对我不起作用,我需要添加 next
参数
url='http://localhost:8050/login?next=%2F'
对于登录请求。其余的就像
我发现在使用 jupyter 时 api 上传文件响应 403,
需要加上“X-XSRFToken”header才能解决..
data= json.dumps({
"name": "test.jpg",
"path": "path",
"type":"file",
"format": "base64",
"content": "base64 data"
})
headers["X-XSRFToken"] = xsrf_cookie
s.put(url, data=data, headers=headers)