【问题标题】:Interact with password protected Jupyter /api与受密码保护的 Jupyter /api 交互
【发布时间】:2017-02-21 09:02:39
【问题描述】:

一位朋友正在尝试运行script 来检查哪些笔记本使用的内存最多,但他们的服务器受密码保护。我试图弄清楚如何使用urllib2 配置身份验证,因为我不相信有用户名,只有密码。

【问题讨论】:

    标签: authentication urllib2 jupyter jupyter-notebook


    【解决方案1】:

    发现使用jupyter put api上传文件时响应403,

    需要添加“X-XSRFToken”头才能解决..

    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)
    

    【讨论】:

      【解决方案2】:

      新版本似乎有一些变化。 url '/login' 对我不起作用,我需要添加next 参数

      url='http://localhost:8050/login?next=%2F'
      

      用于登录请求。其余的就像Hassan answer

      【讨论】:

        【解决方案3】:

        @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了。

        【讨论】:

        • 感谢您指出这一点。我已经在我的代码中解决了这个问题,但忘记了这个 SO 帖子/答案。
        【解决方案4】:

        在深入研究笔记本代码并经过反复试验后,我想出了如何做到这一点(我转而使用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 端点时,它会使用正确的标头集重定向您。我猜requests 保留了重定向的标头,因此我们可以将它们重用于其他调用。只提取 cookie 并使用它们可能会更好,但这目前可行:)

        【讨论】:

          猜你喜欢
          • 2011-12-23
          • 2019-06-25
          • 2010-11-27
          • 1970-01-01
          • 1970-01-01
          • 2021-06-10
          • 2013-03-02
          • 2015-11-15
          • 2011-02-06
          相关资源
          最近更新 更多