2017-09-07 14 views
0

私は自分のjupyterハブとシングルユーザーサーバーを稼働させています。私はJupyterノートブックREST APIを使用してすべてのノートブックを入手しています。私はhttp://127.0.0.1:8000/user/username/api/contentsを使用しています。これで私はmu UIで利用可能なノートブックをすべて見ることができました。JupyterノートブックのノートPCを取得するためのAPI

私はpythonスクリプトから同じことをしようとすると、私は200レスポンスコードを取得していますが、ユーザのユーザ名とパスワードを入力する必要があるログインページへのリダイレクトとしてコンテンツを抽出できません。私はまた、リクエストパッケージを通じてこれらの資格情報を渡そうとしました。この

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() 

outpusのようなものは次のとおりです。

<!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=(&#39;20170907062813&#39;,)", 

      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">&times;</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ノートブックAPIにアクセスするために、別のトークンが使用されます。

これはまさに私が探しているものです。どのようにすれば、この異なるトークンを作成して、jupyterノートブックAPIにアクセスできるようにすることができますか?

答えて

0

ジュピターノートブックにはアクセストークンが必要です(これは、ジュピターノートブックを起動するときに表示されます)。私の場合、このようなものは、その後、働いていた:

import requests 
#Note that the url doesn't have a user or username attribute 
api_url = 'http://127.0.0.1:8888/api/contents' 
payload = {'token': 'xxxxxx'} 
result = requests.get(api_url 
        #, auth=('username', 'password') 
       ,params = payload) 
+0

私はそのようなユーザー・エラーを得なかったためjupterhubトークンコマンドを使用してアクセストークンを作成しようとしました。私もadmin_usersにユーザを追加して、jupyterhubの設定でユーザをホワイトリストに追加しようとしました – MrunmayeeJog

+0

api_urlを 'user/username'パスなしで使用した形式で提供していれば、jsonとして表示できますか? – ShreyasG

+0

ブラウザでコンテンツを見ることができます。 jupiter hub経由でjupter notebook apisにアクセスするにはどうすればいいですか? – MrunmayeeJog

関連する問題