尝试重新创建由网站上的表单提交的帖子请求,但是当我使用节点模块请求直接重新创建请求时,我获得302状态代码并且正文为空。我将附上我正在尝试重新创建的帖子请求的图片以及我的代码(我正在使用cookie jar持有cookie,并且事先正在提出正确的请求以存储登录cookie等)。谢谢!
const request = requests.defaults({
jar: true
})
const fetchGradesData = {
'f': 'f',
'javax.faces.ViewState': 'j_id5',
'f:inside:GradedTab:AssignMPSel': '4',
'f:inside:GradedTab:j_id_jsp_394614891_10pc8': '03-16-2019',
'f:inside:GradedTab:j_id_jsp_394614891_12pc8': '06-07-2019',
'f:_idcl': 'f:inside:j_id_jsp_1774471256_10pc5'
}
const fetchGradesHeaders = {
'Accept': "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
"Accept-Encoding": "gzip, deflate, br",
"Accept-Language": "en-US,en;q=0.9",
'Connection': "keep-alive",
"Content-Type": "application/x-www-form-urlencoded",
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36",
}
request.post(
"https://mybackpack.gulliverschools.org/SeniorApps/studentParent/academic/dailyAssignments/gradeBookGrades.faces", {
headers: fetchGradesHeaders,
formData: fetchGradesData
},
function (err, response, body) {
console.log(response.statusCode)
}
)
这是我用来发送帖子请求的代码。
以下是我获得的响应标头和chrome dev工具的响应标头:
{ date: 'Mon, 01 Apr 2019 17:29:19 GMT',
server: 'Apache',
'x-frame-options': 'SAMEORIGIN',
'x-xss-protection': '1;mode=block',
'strict-transport-security': 'max-age=31536000; includeSubDomains',
'content-security-policy': 'default-src \'self\' mybackpack.gulliverschools.org:444 *.senior-systems.com:444 *.google-analytics.com ; script-src \'self\' mybackpack.gulliverschools.org:444 *.senior-systems.com:444 seal.godaddy.com \'unsafe-inline\' \'unsafe-eval\' *.google-analytics.com; style-src \'self\' mybackpack.gulliverschools.org:444 *.senior-systems.com:444 \'unsafe-inline\'; img-src \'self\' mybackpack.gulliverschools.org:444 *.senior-systems.com:444 data: *.google-analytics.com seal.godaddy.com *.seniormbp.com ; object-src \'self\' mybackpack.gulliverschools.org:444 *.senior-systems.com:444 *.google-analytics.com *.seniormbp.com \'unsafe-inline\'; child-src \'self\' mybackpack.gulliverschools.org:444 *.senior-systems.com:444; frame-ancestors \'self\' *.senior-systems:444 *.goradius.com;',
p3p: 'CP=\'CAO PSA OUR\'',
'cache-control': 'no-store',
expires: 'Mon, 01 Apr 2019 17:27:39 GMT',
'x-powered-by': 'JSF/1.2',
'set-cookie': [ 'senior.session.expired=true' ],
location: 'https://mybackpack.gulliverschools.org/SeniorApps/studentParent/academic/dailyAssignments/gradeBookGrades.faces?convid=20816',
'content-length': '0',
'keep-alive': 'timeout=5, max=100',
connection: 'Keep-Alive' }
根据MDN Documentation,响应代码302是:
发现重定向状态响应代码的超文本传输协议(HTTP)302指示所请求的资源已临时移动到Location头所给出的URL。浏览器重定向到此页面,但搜索引擎不会更新其对资源的链接(在'SEO-speak'中,据说'link-juice'未发送到新URL)。
因此,我建议您考虑一下当该资源在该URL中暂时不可用时发生的情况。
这样做的一种方法可以是通过询问响应代码并且如果它是302重复该请求而是重复位置响应头中的链接。