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 请求是不是保证特定响应?的主要内容,如果未能解决你的问题,请参考以下文章