使用Python';s请求

使用Python';s请求,python,python-requests,Python,Python Requests,我正试图使用Pythonrequests库中的POST请求从网站中获取一些数据。不幸的是,我无法发布到该页面的链接,因为您必须登录到该网站才能使用它 我尝试复制的请求的文件扩展名为.ehtml,这是我希望重新创建的请求负载的一部分: ------WebKitFormBoundary8rntuVzldIBHkILv Content-Disposition: form-data; name="session_id" W0pNKn8AAQEAACD-XkYAAAAJ ------WebKitForm

我正试图使用Python
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您尝试过包含相同的“随机”吗请求正文中的字符串?