2017-09-07 7 views
0

나는 내 jupyter 허브와 단일 사용자 서버를 실행 중입니다. Jupyter 노트북 REST API를 사용하여 사용 가능한 모든 노트북을 얻고 있습니다. http://127.0.0.1:8000/user/username/api/contents을 사용하고 있습니다. 이것으로 mu UI에서 사용 가능한 모든 노트북을 볼 수 있습니다.Jupyter 노트북 API를 사용하여 노트북을 얻으십시오.

그러나 파이썬 스크립트에서 동일한 작업을 수행하려고하면 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 Notebook API에 액세스하는 데 다른 토큰이 사용됩니다.

이것이 내가 찾고있는 것입니다. 이 토큰을 어떻게 만들어서 jupyter 노트북 API에 액세스 할 수 있습니까?

답변

0

Jupyter Notebook에는 액세스 토큰이 필요합니다 (이것은 jupyter 노트북을 시작할 때 표시되어야 함). 내 경우에는이 같은 후 일 :

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

브라우저에서 내용을 볼 수 있습니다. 어떻게하면 jupyter 허브를 통해 jupter 노트북 API에 액세스 할 수 있습니까? – MrunmayeeJog

관련 문제