我正在尝试使用Jupyter rest API,使用在本地Anaconda上运行的python程序将文件传输到Docker容器中的本地Jupyter。
在对如何输入令牌进行了一些摸索之后,我已经成功地执行了requests.get()。
现在,我想执行requests.post()命令来传输文件。
配置方式:
- 在Windows的Docker工具箱上运行的本地Docker容器
- Docker版本17.04.0-ce,内部版本号4845 c56
- tensorflow/tensorflow包括Jupyter最新版本安装
- jupyter内核网关==0.3.1
- 在Windows 10计算机上运行的本地Anaconda v. 4.3.14
编码:
token = token_code_provided_by_jupyter_at_startup
api_url = "http://192.168.99.100:8888/api/contents"
# getting the file's data from disk and converting into a json file
cwd = os.getcwd()
file_location = cwd+r'\Resources\Test\test_post.py'
payload = open(file_location, 'r').read()
b64payload = base64.encodestring(payload)
body = json.dumps({
'content':b64payload,
'name': 'test_post.py',
'path': '/api/contents/',
'format': 'base64',
'type':'file'
})
# getting the xsrf cookie
client = requests.session()
client.get('http://192.168.99.100:8888/')
csrftoken = client.cookies['_xsrf']
headers ={'Content-type': 'application/json', 'X-CSRFToken':csrftoken, 'Referer':'http://192.168.99.100:8888/api/contents', 'token':token}
response = requests.post(api_url, data=body, headers=headers, verify=True)
返回错误
[W 12:22:36.710笔记本应用程序] 403 POST /API/内容(192.168.99.1):XSRF cookie与POST参数不匹配[W 12:22:36.713 NotebookApp] 403 POST /api/内容(192.168.99.1)4.17毫秒引用= http://192.168.99.100:8888/api/contents
2条答案
按热度按时间yduiuuwa1#
我的解决方案灵感来自于@SaintNazaire,在Chrome浏览器中,我打开cookie文件夹,发现Cookie中有重复的
_xsrf
项,我将其全部删除并刷新Jupyter,然后一切顺利。x1c 0d1xagxfikkp2#
实际上,在使用头令牌进行身份验证时,不需要xsrf cookie。
请参考Jupyter笔记本文档。
http://jupyter-notebook.readthedocs.io/en/latest/security.html