Jupyter ハブとシングルユーザー サーバーを実行しています。Jupyter ノートブック REST API を使用して、利用可能なすべてのノートブックを取得しています。http://127.0.0.1:8000/user/username/api/contentsを使用しています。これにより、mu UI で使用可能なすべてのノートブックを表示できます。
ただし、Python スクリプトから同じことを実行しようとすると、200 応答コードが返されますが、ユーザーのユーザー名とパスワードを入力する必要があるログイン ページにリダイレクトされるため、コンテンツを抽出できません。また、これらの資格情報を requests パッケージを介して渡そうとしました。このようなもの
import requests
api_url = 'http://127.0.0.1:8000/user/username/api/contents'
result = requests.get(api_url, auth=('username', 'password'))
print result
print result.json()
出力は次のとおりです。
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>Jupyter Hub</title>
<meta http-equiv="X-UA-Compatible" content="chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="/hub/static/css/style.min.css?v=d96e0760e0c2b7356ce89635b646c350" type="text/css"/>
<script src="/hub/static/components/requirejs/require.js?v=6da8be361b9ee26c5e721e76c6d4afce" type="text/javascript" charset="utf-8"></script>
<script>
require.config({
urlArgs: "v=('20170907062813',)",
baseUrl: '/hub/static/js',
paths: {
components: '../components',
jquery: '../components/jquery/jquery.min',
bootstrap: '../components/bootstrap/js/bootstrap.min',
moment: "../components/moment/moment",
},
shim: {
bootstrap: {
deps: ["jquery"],
exports: "bootstrap"
},
}
});
</script>
<script type="text/javascript">
window.jhdata = {
base_url: "/hub/",
prefix: "/",
}
</script>
</head>
<body>
<noscript>
<div id='noscript'>
Jupyter Hub requires JavaScript.<br>
Please enable it to proceed.
</div>
</noscript>
<div id="header" class="navbar navbar-static-top">
<div class="container">
<span id="jupyterhub-logo" class="pull-left"><a href="/hub/"><img src='/hub/logo' alt='JupyterHub' class='jpy-logo' title='Home'/></a></span>
</div>
</div>
<div id="login-main" class="container">
<form action="/hub/login?next=%2Fhub%2Fuser%2Fpnda%2Fapi%2Fcontents" method="post" role="form">
<div class="auth-form-header">
Sign in
</div>
<div class='auth-form-body'>
<p id='insecure-login-warning' class='hidden'>
Warning: JupyterHub seems to be served over an unsecured HTTP connection.
We strongly recommend enabling HTTPS for JupyterHub.
</p>
<label for="username_input">Username:</label>
<input
id="username_input"
type="username"
autocapitalize="off"
autocorrect="off"
class="form-control"
name="username"
val=""
tabindex="1"
autofocus="autofocus"
/>
<label for='password_input'>Password:</label>
<input
type="password"
class="form-control"
name="password"
id="password_input"
tabindex="2"
/>
<input
type="submit"
id="login_submit"
class='btn btn-jupyter'
value='Sign In'
tabindex="3"
/>
</div>
</form>
</div>
<div class="modal fade" id="error-dialog" tabindex="-1" role="dialog" aria-labelledby="error-label" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span><span class="sr-only">Close</span></button>
<h4 class="modal-title" id="error-label">Error</h4>
</div>
<div class="modal-body">
<div class="ajax-error">
The error
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
<button type="button" class="btn btn-primary" data-dismiss="modal" data-dismiss="modal">OK</button>
</div>
</div>
</div>
</div>
<script>
if (window.location.protocol === "http:") {
// unhide http warning
var warning = document.getElementById('insecure-login-warning');
warning.className = warning.className.replace(/\bhidden\b/, '');
}
</script>
</body>
</html>
Traceback (most recent call last):
File "test.py", line 31, in <module>
check_running()
File "test.py", line 28, in check_running
contents = r.json()
File "/usr/lib/python2.7/dist-packages/requests/models.py", line 740, in json
return json.loads(self.content.decode(encoding), **kwargs)
File "/usr/lib/python2.7/json/__init__.py", line 338, in loads
return _default_decoder.decode(s)
File "/usr/lib/python2.7/json/decoder.py", line 366, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/usr/lib/python2.7/json/decoder.py", line 384, in raw_decode
raise ValueError("No JSON object could be decoded")
私はJupyterにかなり慣れていません。私の私は何かを逃しています。API を呼び出す前に、他にどのようにユーザーを認証できますか。
これは jupyerhub ドキュメントで見ました - API トークンは JupyterHub REST API リクエストを承認することに注意してください。同じトークンは、JupyterHub によって管理されるノートブック サーバーによって提供される Jupyter Notebook REST API へのアクセスを承認しません。Jupyter Notebook API へのアクセスには別のトークンが使用されます。
これはまさに私が探しているものです。ジュピター ノートブック API スルー ハブにアクセスするために、この別のトークンを作成するにはどうすればよいですか。