【问题标题】:can't replicate submitting a form through a post request无法通过发布请求复制提交表单
【发布时间】:2019-04-01 17:23:00
【问题描述】:

尝试重新创建由网站上的表单提交的发布请求,但是当我直接使用节点模块请求重新创建请求时,我得到一个 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 开发工具的响应头:

{ 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' }

【问题讨论】:

  • 你能显示响应头吗?
  • @Tabare 用标题更新了帖子!谢谢!

标签: javascript node.js http-post


【解决方案1】:

根据MDN Documentation响应码302为:

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

所以,我建议您考虑当资源在该 url 中暂时不可用时发生的这种情况。

执行此操作的一种方法是询问响应代码,如果是 302,则重复请求但指向位置响应标头中的链接。

【讨论】:

  • 感谢您的回复,但是我尝试向位置 URL 发送相同的发布请求,但是我得到了相同的 302 响应和一个空的正文。
  • 新请求是否有位置的响应响应头? (如果是这种情况,那么我会尝试重复该过程,直到响应代码更改)
  • 所以我做了一个递归函数,如果状态码是 302(有 2 秒延迟),它基本上调用了相同的 post 请求到 location 标头,并且它已经调用了大约 50 次,所以不幸的是没用
  • 那我不知道怎么解决了,请贴出解决方案(万一你找到了)
猜你喜欢
  • 1970-01-01
  • 2012-06-30
  • 2010-09-13
  • 1970-01-01
  • 2018-12-20
  • 1970-01-01
  • 1970-01-01
  • 2017-02-18
  • 1970-01-01
相关资源
最近更新 更多