以编程方式提交表单

时间:2009-08-26 09:13:43

标签: c# screen-scraping

4 个答案:

答案 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属性设置为请求来解决此问题。这是一个糟糕的安全措施,但经常用于我的经验。

Here you can find some sample user agent strings

答案 3 :(得分:1)

在该请求中唯一让我感到奇怪的是Expect标头。 Apparently it's caused problems for people in the past。要停止它,您可以使用以下行:

System.Net.ServicePointManager.Expect100Continue = false;

如果这是问题,可能值得将该属性设置回以前的状态,因为它是一个全局变量,可能会影响代码的其他部分。