- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
有人请帮忙 - 一直在努力解决这个糟糕的问题!
我在做什么 - 我有一个 ASPX 页面,我从该页面发起一个 GET,然后一个 POST 到一个 HTTPS 页面,以便登录它。我花了很多时间将我的 GET 和 POST 构造与使用 fiddler(协议(protocol)分析器)的浏览器 GET/POST 进行比较,我的请求很好。
但是,当我尝试通过浏览器登录时,一切正常并登录。当我运行我的页面时,我可以看到正确的 GET 和 POST,但我收到 302 found 'object moved error'
最初我认为这是一个 cookie 问题,但经过大量实验后我很确定这与 cookie 无关。我在浏览器上禁用了 cookies 和 javascript 并尝试过,页面在没有任何一个的情况下工作正常。然后我模拟了确切的 GET/POST。
这是我的情况:
一些其他的事情 -
a) 我从最近的浏览器 POST 复制了 POST 响应,并用这个浏览器 POST 替换了我的 POST 参数,这让我得到了正确的响应!这表明
- 我的标题很好
- 我的编码设置/环境等都很好
- VIEWSTATE 值中有些可疑,这只能是因为浏览器首先将它发送给我(在我解析 GET VIEWSTATE 变量并在 POST 中使用它时没有损坏,它完全没问题)
更新 我也试过 WebClient 只是为了检查 - 没有区别,相同的 302。更新 移动的对象基本上指向一个错误页面,上面写着“发生严重错误等等” - POST 在服务器上导致错误,而良好的 POST(浏览器的)之间的唯一区别) 和我的 POST 是 Viewstate 变量。
那么 - 我做错了什么?为什么这个残酷的世界要折磨我?!!
(PS - 浏览器序列中的另一个差异,不确定它有多重要)
Browser:<br/>
CONNECT<br/>
GET<br/>
GET (for a favicon, which returns an error)<br/>
CONNECT<br/>
POST (success)<br/>
Me:<br/>
CONNECT<br/>
GET<br/>
POST (flaming failure, 302 - page moved)<br/>
对于那些关心的人,我的 POST header 构造代码
HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(URL);
myRequest.UserAgent = chromeUserAgent;
//myRequest.CookieContainer = cCookies;
myRequest.ContentType = "application/x-www-form-urlencoded";
myRequest.Accept = chromeAccept;
myRequest.Referer = url;
myRequest.AllowAutoRedirect = false;
myRequest.Host = "thesitethatskillingme.com";
myRequest.Headers.Add("Origin", "https://thesitethatskillingme.com");
myRequest.Headers.Add("Accept-Encoding", chromeAcceptEncoding);
myRequest.Headers.Add("Accept-Language", chromeAcceptLanguage);
myRequest.Headers.Add("Accept-Charset", chromeAcceptCharset);
myRequest.Headers.Add("Cache-Control", "max-age=0");
myRequest.ServicePoint.Expect100Continue = false;
myRequest.Method = "POST";
myRequest.KeepAlive = true;
ASCIIEncoding ascii = new ASCIIEncoding();
byte[] bData = ascii.GetBytes(data);
myRequest.ContentLength = bData.Length;
using (Stream oStream = myRequest.GetRequestStream())
oStream.Write(bData, 0, bData.Length);
...然后读取流等。没有 cookie。
最佳答案
我终于弄明白了 - 希望遇到同样问题的其他人不必再次经历这个问题。大多数 HTTP 专家和熟悉 WWW 开发的人可能永远不会遇到它,但新手很可能会。
那么问题是什么?我已将问题缩小到我一直怀疑的 VIEWSTATE(请参阅我上面的帖子...)。事实证明,我所要做的就是在将解析的 VIEWSTATE 值放入 POST 之前对 Server.UrlEncode 进行编码 - 就是这样。我花了一整天的时间才做到这一点。
SO,作为对其他新人的学习
如果您尝试通过代码 POST 到页面并需要向其发送您从 GET 解析的 VIEWSTATE 变量,那么在创建参数之前先对其进行 Server.UrlEncode - 例如
<li>do GET</li>
<li>get the response stream into a string</li>
<li>parse the string (I use HtmlAgilityPack- fabulous)</li>
<li>param1 = name +"="+Server.UrlEncode(value)+"&"</li>
<li>POST param = param1+param2+...
-send this in POST - voila, it works</li>
因为我从来没有用过 HttpWebRequest 等编程,所以我首先使用 fiddler(很棒的分析工具,免费)逐一消除 cookie、javascript、GET 构造、POST 构造,然后最后缩小我的问题范围使用 BeyondCompare 进行了字节比较,那时我发现了 VIEWSTATE 变量修改。
我学到了有关 URL 编码的类(class),希望您不必学习!
关于c# - 烦恼! POST 在 HttpWebRequest 中返回 302 found object moved 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3484558/
#include using namespace std; class C{ private: int value; public: C(){ value = 0;
这个问题已经有答案了: What is the difference between char a[] = ?string?; and char *p = ?string?;? (8 个回答) 已关闭
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 7 年前。 此帖子已于 8 个月
除了调试之外,是否有任何针对 c、c++ 或 c# 的测试工具,其工作原理类似于将独立函数复制粘贴到某个文本框,然后在其他文本框中输入参数? 最佳答案 也许您会考虑单元测试。我推荐你谷歌测试和谷歌模拟
我想在第二台显示器中移动一个窗口 (HWND)。问题是我尝试了很多方法,例如将分辨率加倍或输入负值,但它永远无法将窗口放在我的第二台显示器上。 关于如何在 C/C++/c# 中执行此操作的任何线索 最
我正在寻找 C/C++/C## 中不同类型 DES 的现有实现。我的运行平台是Windows XP/Vista/7。 我正在尝试编写一个 C# 程序,它将使用 DES 算法进行加密和解密。我需要一些实
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
有没有办法强制将另一个 窗口置于顶部? 不是应用程序的窗口,而是另一个已经在系统上运行的窗口。 (Windows, C/C++/C#) 最佳答案 SetWindowPos(that_window_ha
假设您可以在 C/C++ 或 Csharp 之间做出选择,并且您打算在 Windows 和 Linux 服务器上运行同一服务器的多个实例,那么构建套接字服务器应用程序的最明智选择是什么? 最佳答案 如
你们能告诉我它们之间的区别吗? 顺便问一下,有什么叫C++库或C库的吗? 最佳答案 C++ 标准库 和 C 标准库 是 C++ 和 C 标准定义的库,提供给 C++ 和 C 程序使用。那是那些词的共同
下面的测试代码,我将输出信息放在注释中。我使用的是 gcc 4.8.5 和 Centos 7.2。 #include #include class C { public:
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
我的客户将使用名为 annoucement 的结构/类与客户通信。我想我会用 C++ 编写服务器。会有很多不同的类继承annoucement。我的问题是通过网络将这些类发送给客户端 我想也许我应该使用
我在 C# 中有以下函数: public Matrix ConcatDescriptors(IList> descriptors) { int cols = descriptors[0].Co
我有一个项目要编写一个函数来对某些数据执行某些操作。我可以用 C/C++ 编写代码,但我不想与雇主共享该函数的代码。相反,我只想让他有权在他自己的代码中调用该函数。是否可以?我想到了这两种方法 - 在
我使用的是编写糟糕的第 3 方 (C/C++) Api。我从托管代码(C++/CLI)中使用它。有时会出现“访问冲突错误”。这使整个应用程序崩溃。我知道我无法处理这些错误[如果指针访问非法内存位置等,
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 7 年前。
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,因为
我有一些 C 代码,将使用 P/Invoke 从 C# 调用。我正在尝试为这个 C 函数定义一个 C# 等效项。 SomeData* DoSomething(); struct SomeData {
这个问题已经有答案了: Why are these constructs using pre and post-increment undefined behavior? (14 个回答) 已关闭 6
我是一名优秀的程序员,十分优秀!