我尝试使用requests
中的python3
模块自动执行文件上传。我尝试复制的设置(我手动完成)如下:
我在网站上找到我的笔记(代码中为SUBMIT_URL
)。
我被重定向到我大学的登录信息(代码中为LOGIN_URL
)。
我登录我的帐户(使用我的用户名/密码,从credentials.py
导入,因为我不想在此分享)。
我被重定向回提交网页。它有一个拖放文件的区域。我将文件拖到那里,然后提交。
这是整个过程,我的大部分都在工作。
我想要登录的文件托管服务名为moodle
,它并没有真正的API,所以我一直试图这样做"手动&#34 ;。我确信登录工作正常,因为login_page_query.content
会返回说“你已登录”的内容,但我们无法以任何理由重定向你"。
问题似乎在draft_query
下面。
draft_query
正在尝试模仿chrome sends here的请求,我尝试使用DRAFT_FILES_PAYLOAD
。 sesskey
,client_id
和itemid
似乎都是以某种方式动态生成服务器端的,但我能够通过{{1的正则表达式搜索获得看起来合理的东西}}。这通常看起来像this(默认情况下,所有这些都在一行上,因此链接本身可能不是最有用的。)
所以,虽然我无法将submit_page.content
/其他数据与chrome进行比较(因为每次加载页面时似乎都会发生变化),每次运行python时都会得到一些信息。格式与chrome相同,看似合理。
我遇到的当前错误是sesskey
。 draft_query
是
draft_query.content
尽管b'{"error":"A required parameter (sesskey) was missing","errorcode":"missingparam","stacktrace":null,"debuginfo":null,"reproductionlink":null}'
是
draft_files_payload
显然包含<MultipartEncoder: (('sesskey', 'X6DD4DCAHC'), ('client_id', '58dc838805c18'), ('filepath', '/'), ('itemid', '288033100'))>
。作为旁注,我曾经将sesskey
作为字典,但我担心订单可能很重要。但这根本没有帮助。
另外需要注意的是,对于Chrome浏览器我尝试模拟的问题(使用draft_files_payload
),内容类型是
draft_files_query
application/x-www-form-urlencoded; charset=UTF-8
默认为requests
,因此我尝试将其设为标题。我不知道它是否起作用/产生了积极的影响。
我不确定任何人都能帮助我的具体程度,因为我无法真正透露完成这项工作所需的证书。任何人都可以采取一般策略/解决我可以做的事情吗?我真的很不清楚自己在做什么,并且昨天获得了广泛的帮助(尽管现在我觉得我觉得我可以复制下面的内容了。)
总结:
当前错误:
text/plain
在复制this查询时失败,即使看起来我有正确的数据/格式。
draft_query
答案 0 :(得分:0)
尝试将其从Multipart编码器更改为简单词典。
draft_files_payload = {“ sesskey”:sess_key,“ client_id”:client_id,“ filepath”:“ /”,“ itemid”:item_id}