http POST 请求是不是保证特定响应?

Posted

技术标签:

【中文标题】http POST 请求是不是保证特定响应?【英文标题】:Does a http POST request guarantee a specific response?http POST 请求是否保证特定响应? 【发布时间】:2019-06-30 19:45:31 【问题描述】:

我正在尝试使用 c# 登录我学校的网站。使用 Fiddler 软件,我设法捕获了我的浏览器发出的发布请求以及我在 c# 中重新创建的发布请求。它们似乎完全相同,但是我得到的响应却不同。如果发布请求相同,至少使用相同的状态码,服务器理论上不应该以相同的方式响应吗? 当我使用自己的客户端时,我得到响应代码 200,但使用我的浏览器我得到 303(应该是)。

我注意到 WebForm 内容在浏览器中要大得多,但客户端请求中使用的值来自之前的 GET 请求。抱歉,帖子太长了。

这些是 Fiddler 捕获的请求:

浏览器请求:

POST https://www.lectio.dk/lectio/31/login.aspxHTTP/1.1

主办方:www.lectio.dk 连接:保持活动

内容长度:881

缓存控制:max-age=0

来源:https://www.lectio.dk

升级不安全请求:1

内容类型:application/x-www-form-urlencoded

用户代理:Mozilla/5.0(Windows NT 10.0;Win64;x64)AppleWebKit/537.36(Khtml,如 Gecko)Chrome/75.0.3770.100 Safari/537.36

接受:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,/;q=0.8,application/signed-exchange; v=b3

推荐人:https://www.lectio.dk/lectio/31/login.aspx

接受编码:gzip、deflate、br

接受语言:en-GB,en-AS;q=0.9,en-DK;q=0.8,en;q=0.7,da-DK;q=0.6,da;q=0.5,en-US ;q=0.4

Cookie: LastLoginExamno=31; ASP.NET_SessionId=ANTOMFZ7ZZWAYYW52OSZQYRXIBAIEGIPGILQHQ6TEJ2O5XEUTE3CAIBA; isloggedin3=N

时间= 0&__ EVENTTARGET = M%24Content%24submitbtn2&__ EVENTARGUMENT =&__的scrollPosition =&__ VIEWSTATEX = vQAAAGlpZQk1NDg4MjIyMjVpbAJrAIFsAmhpZGwCZwJpbAJrAWUDb2ZmbASBaWRsAoFpZGwCgWlkbAJoaWpkam4BZQcyMDE5LzIwbgFlBDIwMTl%2BAXFsAWhkZwNpZGwCZwVpZGwCaGlkbAJnB2lkbAaBaWwCawJlFE4mIzIzMDtydW0gR3ltbmFzaXVtZGcFaWRsAoFpZGwCgWlsAmsDZQI1MGRnB2lkbAKBaWRsAoFpamlsAmsEcGRkZGRkBQAAABNWYWxpZGF0ZVJlcXVlc3RNb2RlDGF1dG9jb21wbGV0ZQlpbm5lcmh0bWwJbWF4bGVuZ3RoB0NoZWNrZWQAXXvzIZezMAoPCqv5j%2FZuNIu6H1E%3D&__ VIEWSTATEY_KEY =&__ VIEWSTATE =&__ EVENTVALIDATION = CY6WRLYHybmNGyj0%2FWgw9s%2BaewM2gnWAIUbvnFzgoYWgYPLkQnxHIBIpQPjEa3On7opgtRStMA%2FpLhG9PzzgXNTaWwTZIeSfKwS74n4yMULKRovRw2H%2Fwlg8HRUdJemRR%2FyFEzIkbToD8psr4CO9G3nzX706D25SYrmTc2WygXZ%2B1oYTAMe3FD7ocBdwh%2FrHRBAOaoTzCsCSlpMVce8GxcWKS3lryh8E8yVmy4AgrHpjgj3R0g1ziPKG96%2B1vVr%2B&M%24Content %24username2=用户名&m%24Content%24passwordHidden=密码&LectioPostbackId=

C# 客户端请求:

POST https://www.lectio.dk/lectio/31/login.aspxHTTP/1.1

缓存控制:max-age=0

接受:text/html、application/xhtml+xml、application/xml; q=0.9, 图像/webp, 图像/apng, /; q=0.8,应用程序/签名交换; v=b3

接受编码:gzip、deflate、br

接受语言:en-GB、en-AS; q=0.9,en-DK; q=0.8,恩; q=0.7,da-DK; q=0.6,达; q=0.5, en-US; q=0.4

用户代理:Mozilla/5.0(Windows NT 10.0;Win64;x64)AppleWebKit/537.36(KHTML,如 Gecko)Chrome/75.0.3770.100 Safari/537.36

推荐人:https://www.lectio.dk/lectio/31/login.aspx

来源:https://www.lectio.dk

升级不安全请求:1

连接:保持活动

Cookie: LastLoginExamno=31; ASP.NET_SessionId=DBYVNKXMKMO2F7XF7T22TM4RALBLKYPBQT42BGZX6H2UA5TZ2ZHCAIBA

内容类型:application/x-www-form-urlencoded

内容长度:485

主持人:www.lectio.dk

时间= 0&__ EVENTTARGET = M%24Content%24submitbtn2&__ EVENTARGUMENT =&__的scrollPosition =&__ VIEWSTATEX = FAAAAGlpZQotMTY2NzgzMzI1ZGQAAAAAALJLI4R47o%2FDmiaj2f9RNeeWl%2B5K&__ VIEWSTATEY_KEY =&__ VIEWSTATE =&__ EVENTVALIDATION =%2FYOJVoNfWl%2F8olHfFefQyPMhqxIUan914QzoN6cFD0eGMukIp%2B%2FciKjpJU04AgXJhME7LttuUGcP8yOJ7xPSSP%2Bl8AnZk2DAdvMIFLFAAPD2Rf4K1DapTvDcnWnyz%2Bj1tesSoSUmLcmmh2E0ljSNR1Qr%2BUpIWQ91RtL1jS4GDh0%3D&M%24Content%24username2 = povl0057&M% 24Content%24passwordHidden=jdf59jcx&LectioPostbackId=

【问题讨论】:

希望用户名和密码只是随机字符串,而不是您的实际凭据... 您在请求中传递了 SessionID,它很可能已经过期。 帖子中似乎有一个事件验证部分。这需要将服务器发回的内容与前一个 Page 的 get 请求相匹配。它仅适用于 1 个响应,并且该响应可能需要来自执行 get 的同一 IP 地址。这意味着您首先必须 http “获取”表单,解析验证信息,然后使用该验证密钥回传。标头中还有会话标签。您可能需要“登录”才能获得与您的 IP 地址和端口对应的会话标签。 响应可以是服务器想要的任何响应。 用户名和密码是出于隐私原因的占位符,WebForm 和 cookie 中使用的值来自之前的 Http 获取请求。 【参考方案1】:

如果post请求相同,服务器理论上不应该以相同的方式响应吗?

没有

【讨论】:

或许能解释一下? 没有。服务器可以响应任何他们想要的。答案很明确。 嗯,您能详细说明一下吗?是否不希望服务器以相同的方式响应?

以上是关于http POST 请求是不是保证特定响应?的主要内容,如果未能解决你的问题,请参考以下文章

java中如何判断发送的请求是不是得到响应

HTTP两种请求方法:GET和POST基础了解

前端必备HTTP技能之请求头响应头格式以及请求方法简述

HTTP请求报文和响应报文

GET和POST的区别

GET & POST