我试图发布使用HTTPWebrequest,这是我一直回复的回复:
您必须使用支持并启用了JavaScript的浏览器
这是我的邮政编码:
HttpWebRequest myRequest = null;
myRequest = (HttpWebRequest)HttpWebRequest.Create(submitURL);
myRequest.Headers.Add("Accept-Language", "en-US");
myRequest.Accept = "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/xaml+xml, application/vnd.ms-xpsdocument, application/x-ms-xbap, application/x-ms-application, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*";
myRequest.Method = WebRequestMethods.Http.Post;
myRequest.Headers.Add("Accept-Language", "en-US");
myRequest.Accept = "*/*, text/xml";
myRequest.ContentType = "application/x-www-form-urlencoded" + "\n" + "\r";
myRequest.CookieContainer = cookieContainer;
myRequest.Headers.Add("UA-CPU", "x86");
myRequest.Headers.Add("Accept-Encoding", "gzip, deflate");
//cPostData section removed as submitting to SO
myRequest.ContentLength = cPostData.Length;
myRequest.ServicePoint.Expect100Continue = false;
StreamWriter streamWriter = new System.IO.StreamWriter(myRequest.GetRequestStream());
streamWriter.Write(cPostData);
streamWriter.Close();
HttpWebResponse httpWebResponse = (HttpWebResponse)myRequest.GetResponse();
StreamReader streamReader = new System.IO.StreamReader(httpWebResponse.GetResponseStream());
string stringResult = streamReader.ReadToEnd();
streamReader.Close();
如何避免出现此错误?
答案 0 :(得分:6)
很难说出确切的问题是什么,因为收到您请求的服务器不认为它是有效的。
尝试的第一件事可能是将HttpWebRequest
上的UserAgent
属性设置为某个有效浏览器的用户代理字符串,因为服务器可能正在使用此值来确定是否要提供服务页。
答案 1 :(得分:5)
这与您的代码无关 - Web服务器代码具有检测或依赖Javascript的功能。很可能页面上的一段Javascript填写(或在发布之前修改)一些隐藏的表单字段。
解决方案完全取决于Web服务器对表单数据的期望。
答案 2 :(得分:0)
这是一个外行人的答案,而不是对httpWebRequest对象的100%技术上准确的描述,并且这意味着因为发布它所花费的时间量。这个答案的第一部分是澄清最后的句子。
httpWebRequest对象基本上充当与网页交互的浏览器。这是一个非常简单的浏览器,没有UI。它的设计基本上是为了能够发布和读取网页。因此,它不支持目前浏览器中常见的各种功能,例如JavaScript。
您尝试发布的页面需要javascript,而httpWebRequest对象不支持该页面。如果您无法控制WebRequst对象发布到的页面,则您必须找到另一个要发布到其中的wat。如果您拥有或控制页面,则需要修改页面以删除需要javascript的项目(例如Ajax功能等)。
<强>加强>
我故意没有添加任何关于指定用户代理以试图诱骗Web服务器认为httpWebRequest对象支持JavaScript的内容。因为页面可能确实需要启用JavaScript才能正确显示页面。但是,我的很多假设都证明是错误的,所以我会同意@Andrew Hare并说它值得一试。