答案 0 :(得分:3)
您每次都在创建一个新的CookieContainer。尝试使用索引页请求的CookieContainer作为表单提交的容器,它应该包含额外的cookie。或者,除了表单之外的其他内容可能会传递额外的cookie。使用IEinspector的HttpAnalyzer或Firefox的Firebug检查页面何时加载,以确保其他表单元素(如图像)未通过cookie。
答案 1 :(得分:2)
我破解了它。似乎.NET服务器不喜欢我同时更改状态和会话。 如果我从“
”更改“ddlStatus”,它会起作用string postdata = “__EVENTTARGET =安培; __ EVENTARGUMENT =安培; __ VIEWSTATE =” + viewState +“& _MenuCtrl%3AddlSession =”+ sessionId +“& _MenuCtrl%3A_GoTo.x = 57& _MenuCtrl%3A_GoTo.y = 14& ddlStatus = 1& ddlSortedBy = 1”;
到此:
string postdata = “__EVENTTARGET =安培; __ EVENTARGUMENT =安培; __ VIEWSTATE =” + viewState +“& _MenuCtrl%3AddlSession =”+ sessionId +“& _MenuCtrl%3A_GoTo.x = 57& _MenuCtrl%3A_GoTo.y = 14& ddlStatus = 0& ddlSortedBy = 1”;
我将不得不在第二个POST请求中更改ddlStatus,依此类推表单中的每个更改。 .NET似乎受过良好的教育,一次只能吃一个甜蜜。
感谢所有帮助:)
答案 2 :(得分:1)
也许这与您的问题无关,但有时当您刮取网站时,远程服务器会识别出正在浏览的人是脚本并阻止某些操作。我通常通过将UserAgent属性设置为请求来解决此问题。这是一个糟糕的安全措施,但经常用于我的经验。
答案 3 :(得分:1)
在该请求中唯一让我感到奇怪的是Expect
标头。 Apparently it's caused problems for people in the past。要停止它,您可以使用以下行:
System.Net.ServicePointManager.Expect100Continue = false;
如果这是问题,可能值得将该属性设置回以前的状态,因为它是一个全局变量,可能会影响代码的其他部分。