使用Python';s请求
我正试图使用Python使用Python';s请求,python,python-requests,Python,Python Requests,我正试图使用Pythonrequests库中的POST请求从网站中获取一些数据。不幸的是,我无法发布到该页面的链接,因为您必须登录到该网站才能使用它 我尝试复制的请求的文件扩展名为.ehtml,这是我希望重新创建的请求负载的一部分: ------WebKitFormBoundary8rntuVzldIBHkILv Content-Disposition: form-data; name="session_id" W0pNKn8AAQEAACD-XkYAAAAJ ------WebKitForm
requests
库中的POST请求从网站中获取一些数据。不幸的是,我无法发布到该页面的链接,因为您必须登录到该网站才能使用它
我尝试复制的请求的文件扩展名为.ehtml,这是我希望重新创建的请求负载的一部分:
------WebKitFormBoundary8rntuVzldIBHkILv
Content-Disposition: form-data; name="session_id"
W0pNKn8AAQEAACD-XkYAAAAJ
------WebKitFormBoundary8rntuVzldIBHkILv
Content-Disposition: form-data; name="p_session_id"
W0pMOH8AAQEAABZSUVkAAAAD
------WebKitFormBoundary8rntuVzldIBHkILv
Content-Disposition: form-data; name="attach_key"
------WebKitFormBoundary8rntuVzldIBHkILv
Content-Disposition: form-data; name="chosen"
0
------WebKitFormBoundary8rntuVzldIBHkILv
Content-Disposition: form-data; name="debug"
------WebKitFormBoundary8rntuVzldIBHkILv
Content-Disposition: form-data; name="language"
en
------WebKitFormBoundary8rntuVzldIBHkILv
Content-Disposition: form-data; name="game_system_id"
NULL
------WebKitFormBoundary8rntuVzldIBHkILv
Content-Disposition: form-data; name="collection_detail_id"
NULL
------WebKitFormBoundary8rntuVzldIBHkILv
Content-Disposition: form-data; name="competition_id"
NULL
使用有关stackoverflow的一些问题的帮助,到目前为止,我已经成功地重新创建了它:
--30b11983bde849109a3dc93e139e16d4
Content-Disposition: form-data; name="session_id"
--30b11983bde849109a3dc93e139e16d4
Content-Disposition: form-data; name="p_session_id"
--30b11983bde849109a3dc93e139e16d4
Content-Disposition: form-data; name="attach_key"
--30b11983bde849109a3dc93e139e16d4
Content-Disposition: form-data; name="chosen"
0
--30b11983bde849109a3dc93e139e16d4
Content-Disposition: form-data; name="debug"
--30b11983bde849109a3dc93e139e16d4
Content-Disposition: form-data; name="language"
en
--30b11983bde849109a3dc93e139e16d4
Content-Disposition: form-data; name="game_system_id"
NULL
--30b11983bde849109a3dc93e139e16d4
Content-Disposition: form-data; name="collection_detail_id"
NULL
--30b11983bde849109a3dc93e139e16d4
Content-Disposition: form-data; name="competition_id"
NULL
这是使用以下代码完成的:
Q = {
"session_id" : (None,""),
"p_session_id" : (None,""),
"attach_key" : (None,""),
"chosen" : (None,"0"),
"debug" : (None,""),
"language" : (None,"en"),
"game_system_id" : (None,"NULL"),
"collection_detail_id" : (None,"NULL"),
"competition_id" : (None,"NULL")
}
with requests.Session() as s:
p = s.post(login_URL2,data=payload)
#print(p.text)
#d = s.post(req_url,files=Q)
d2 = Request("POST",req_url,files=Q)
d3 = d2.prepare()
print(d3.body.decode('utf-8'))
我相信我最后缺少的是WebKitFormBoundary部分,我找不到任何地方如何插入该部分。这是我第一次使用.ehtml文件进行抓取,因此,如果我遗漏了任何其他明显的内容,非常感谢所有帮助。边界的确切名称并不重要,只要在标题中声明:
Content-Type: multipart/mixed; boundary=gc0p4Jq0M2Yt08jU534c0p
使用此标题,边界将是
--gc0p4Jq0M2Yt08jU534c0p
服务器将查看
内容类型
标题并找出正文部分。当您通过jQuery发送ajax请求并希望发送FormData时,不需要在此FormData上使用JSON.stringify。此外,当您发送文件时,内容类型必须是包含边界的多部分/表单数据-类似于此多部分/表单数据;边界=----WebKitFormBoundary0BPm0koKA
So to send FormData including some file via jQuery ajax you need to:
Set data to the FormData without any modifications.
Set processData to false (Lets you prevent jQuery from automatically transforming the data into a query string).
Set the contentType to false (This is needed because otherwise jQuery will set it incorrectly).
Your request should look like this:
var formData = new FormData();
formData.append('name', dogName);
// ...
formData.append('file', document.getElementById("dogImg").files[0]);
$.ajax({
type: "POST",
url: "/foodoo/index.php?method=insertNewDog",
data: formData,
processData: false,
contentType: false,
success: function(response) {
console.log(response);
},
error: function(errResponse) {
console.log(errResponse);
}
});
导入请求
导入随机、字符串
从请求\u工具带导入多部件编码器
字段={
'文件':('test.png',您的_数据,“image/png”),
“文件id”:“0”
}
边界='----WebKitFormBoundary'\
+''.join(随机.sample(string.ascii_字母+string.digits,16))
m=多端口编码器(字段=字段,边界=边界)
标题={
“主机”:“xxxx”,
“连接”:“保持活动状态”,
“内容类型”:m.Content\u类型
}
req=请求。post('https://xxxx/api/upload,headers=headers,data=m)
打印(请求文本)
通过这种方式,我们可以制作边界格式,如----WebKitFormBoundary8rntuVzldIBHkILv
----WebKitFormBoundary89uZMBZwSHfYjySK
内容配置:表单数据;name=“账号”
废话
------WebKitFormBoundary89uZMBZwSHfYjySK
内容配置:表单数据;name=“出生日期”
废话
------WebKitFormBoundary89uZMBZwSHfYjySK
内容配置:表单数据;name=“名字”
废话
------WebKitFormBoundary89uZMBZwSHfYjySK
内容配置:表单数据;name=“姓氏”
废话
------WebKitFormBoundary89uZMBZwSHfYjySK--
我基本上已将这些webkitform边界转换为JSON,如下所示:
导入请求
数据={
“账号”:诸如此类,
“出生日期”:“诸如此类”,
“名字”:“废话”,
“姓”:“废话”
}
标题={
“授权”:“持票人废话”
}
req=请求。post('https://rest.blah/v1/blah/sign-in,标题=标题,数据=数据)
打印(要求内容)
答复:
b{“code”:200,“data”:{“user_id”:“15442”,“building_id”:“11”,“partment_id”:“4192”}我尝试了以下两个标题,但WebKitFormBoundary没有出现在正文中:
标题={'Content-Type':'multipart/form data;边界=--WebKitFormBoundary9rntuVzldIBHkILv}
和标题1={'Content-Type':'multipart/mixed;boundary=--WebKitFormBoundary9rntuVzldIBHkILv'}
但是如果我试图重新创建一个使用WebKitFormBoundary的请求,而我创建的请求却使用了一个随机字符串(如您的示例中所示),这不会导致问题吗?@OD1995您尝试过包含相同的“随机”吗请求正文中的字符串?