我想从公司网站收集特定事件的数据:http://pipeline.kindermorgan.com/infoposting/notices.aspx?type=CRIT 我曾经工作过很多类似的网站,但到目前为止他们一直非常简单,它只是一个访问网站和使用响应流的问题。在这种情况下,网站要求您从第一个组合框(TSP/TSP名称)中选择一个值。如果没有任何信息被传递,URL将返回与列表中第一个项目关联的数据。我真的需要能够获取与列表中的任何项目相关的数据。WebRequest/POST关于从网站提取特定数据的问题
这是我一直使用至今的代码,但它无法与服务器错误500,所以我猜测,要么我没有正确形成POST或者是缺少在后数据中的某些数据):
对于我上面列出的页面,我只想从组合框(从Trailblazer开始)获得特定TSP通知表的响应流。我知道控件是“ctl00 $ ContentPlaceHolder1 $ ddlpipeline”,我想发送的值是24.当我通过IE浏览时,我还必须按下“恢复”按钮。
当我使用FireBug查看POST请求时,我注意到有很多其他目标/值包括在内。我不确定是否需要发送所有这些以及(以前从未做过POST),但我不确定如何格式化POST中的数据来完成此操作。
如果这个请求看起来很奇怪,请和我联系。我更像是一个数据库人员,并且希望自动化我们每天需要手动查看的许多东西。任何帮助将不胜感激!
var encoding = new ASCIIEncoding();
var postData = "ctl00$ContentPlaceHolder1$ddlpipeline=24";
byte[] data = encoding.GetBytes(postData);
string RemoteURI = "http://pipeline.kindermorgan.com/infoposting/notices.aspx?type=CRIT";
var myRequest = (HttpWebRequest)WebRequest.Create(RemoteURI);
myRequest.Method = "POST";
myRequest.ContentType = "application/x-www-form-urlencoded";
myRequest.ContentLength = data.Length;
var newStream = myRequest.GetRequestStream();
newStream.Write(data, 0, data.Length);
newStream.Close();
var response = myRequest.GetResponse();
var responseStream = response.GetResponseStream();
var responseReader = new StreamReader(responseStream);
我还没有仔细看过这个 - 但是在很高的层面上,如果浏览器成功发布数据并获取所需的响应,那么您还应该在代码中发送相同的请求。这会增加你成功的机会。 – feroze 2011-03-17 18:25:53
谢谢feroze。我最终确信,我在代码中构建的POST数据与我在使用FireBug时看到的完全一样,但仍然无效。然后在神圣的干预时刻,我想起了以前的努力,需要为请求设置用户代理。我做到了这一点,瞧,它像一个冠军。这里是我添加的代码(为了其他人的利益): myRequest.UserAgent =“Mozilla/4.0(compatible; MSIE 7.0; Windows NT 5.1)”; – 2011-03-19 00:56:04