无法通过邮寄请求复制提交表单

问题描述 投票:0回答:1

尝试重新创建由网站上的表单提交的帖子请求,但是当我使用节点模块请求直接重新创建请求时,我获得302状态代码并且正文为空。我将附上我正在尝试重新创建的帖子请求的图片以及我的代码(我正在使用cookie jar持有cookie,并且事先正在提出正确的请求以存储登录cookie等)。谢谢!

This is the post request I am trying to replicate

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工具的响应标头:

Response Headers

{ 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' }
javascript node.js http-post
1个回答
0
投票

根据MDN Documentation,响应代码302是:

发现重定向状态响应代码的超文本传输​​协议(HTTP)302指示所请求的资源已临时移动到Location头所给出的URL。浏览器重定向到此页面,但搜索引擎不会更新其对资源的链接(在'SEO-speak'中,据说'link-juice'未发送到新URL)。

因此,我建议您考虑一下当该资源在该URL中暂时不可用时发生的情况。

这样做的一种方法可以是通过询问响应代码并且如果它是302重复该请求而是重复位置响应头中的链接。

© www.soinside.com 2019 - 2024. All rights reserved.