当前位置:  开发笔记 > 编程语言 > 正文

C#console app中的HTTP Post不会返回与浏览器请求相同的内容

如何解决《C#consoleapp中的HTTPPost不会返回与浏览器请求相同的内容》经验,为你挑选了1个好方法。

我有一个C#控制台应用程序(.NET 2.0框架)使用以下代码执行HTTP帖子:

StringBuilder postData = new StringBuilder(100);
postData.Append("post.php?");
postData.Append("Key1=");
postData.Append(val1);
postData.Append("&Key2=");
postData.Append(val2);

byte[] dataArray = Encoding.UTF8.GetBytes(postData.ToString());

HttpWebRequest httpRequest = (HttpWebRequest)WebRequest.Create("http://example.com/");
httpRequest.Method = "POST";
httpRequest.ContentType = "application/x-www-form-urlencoded";

httpRequest.ContentLength = dataArray.Length;
Stream requestStream = httpRequest.GetRequestStream();
requestStream.Write(dataArray, 0, dataArray.Length);
requestStream.Flush();
requestStream.Close();

HttpWebResponse webResponse = (HttpWebResponse)httpRequest.GetResponse();

if (httpRequest.HaveResponse == true) {
  Stream responseStream = webResponse.GetResponseStream();
  StreamReader responseReader = new System.IO.StreamReader(responseStream, Encoding.UTF8);
  String responseString = responseReader.ReadToEnd();
}

此输出为:
webResponse.ContentLength = -1
webResponse.ContentType = text/html
webResponse.ContentEncoding为空

responseString是带有标题和正文的HTML.

但是,如果我将相同的网址发布到浏览器(http://example.com/post.php?Key1=some_value&Key2=some_other_value),我会得到一个小的XML代码段:


没有与应用程序中相同的HTML.为什么回答如此不同?我需要解析返回的结果,我没有在HTML中获得.我是否必须更改应用程序中的帖子方式?我无法控制接受帖子的服务器端代码.



1> Sean Bright..:

如果您确实应该使用POSTHTTP方法,那么您会遇到一些错误.首先,这一行:

postData.Append("post.php?");

是不正确的.你想张贴 post.php,你不想发布值"post.php?" 到页面.只需完全删除此行.

这件作品:

... WebRequest.Create("http://example.com/");

需要post.php加入它,所以......

... WebRequest.Create("http://example.com/post.php");

再次假设你实际上应该是POST指向页面而不是GETing.如果你应该使用GET,那么已经提供的其他答案适用.

推荐阅读
linjiabin43
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有