再谈HTTP Post XML数据
2011-07-13 10:43
232 查看
之前写过一篇HTTPPost的文章/article/4980457.html
这篇文章的代码其实是有点问题的:第一次提交数据会不通过,然后再试的话都是没有问题的,一直不解,直到今天在MSDN上发现了解决方案,贴出代码如下:
protected string HttpPostData(string URL, string strParm, int outTime)
{
StringBuilder str = new StringBuilder();
try
{
HttpWebRequest WRequest;
HttpWebResponse WResponse = null;
HttpWebResponse response = null;
//preAuth the request
// You can add logic so that you only pre-authenticate the very first request.
// You should not have to pre-authenticate each request.
Uri uri = new Uri(URL);
WRequest = (HttpWebRequest)HttpWebRequest.Create(uri);
WRequest.Credentials = new NetworkCredential("wcadmin", "wcadmin");
WRequest.PreAuthenticate = true;
WRequest.UserAgent = "Upload PLM XML";
WRequest.Method = "HEAD";
WRequest.Timeout = outTime;
WResponse = (HttpWebResponse)WRequest.GetResponse();
WResponse.Close();
// Make the real request.
WRequest = (HttpWebRequest)HttpWebRequest.Create(URL);
WRequest.Credentials = new NetworkCredential("wcadmin", "wcadmin");
WRequest.PreAuthenticate = true;
WRequest.UserAgent = "Upload PLM XML";
WRequest.Method = "POST";
WRequest.AllowWriteStreamBuffering = false;
WRequest.Timeout = 10000;
Byte[] postBytes = Encoding.UTF8.GetBytes(strParm);
WRequest.ContentLength = postBytes.Length;
Stream requestStream = WRequest.GetRequestStream();
requestStream.Write(postBytes, 0, postBytes.Length);
requestStream.Close();
try
{
response = (HttpWebResponse)WRequest.GetResponse();
}
catch (WebException e)
{
response = (HttpWebResponse)e.Response;
}
Stream responseStream = response.GetResponseStream();
StreamReader streamReader = new StreamReader(responseStream, Encoding.Default);
while (streamReader.Peek() != -1)
{
str.Append(streamReader.ReadLine());
}
streamReader.Close();
response.Close();
WResponse.Close();
}
catch (Exception error)
{
str.AppendLine(error.Message);
}
return str.ToString();
}
注意英文注释的那一段,通过这个方法即可成功提交数据,不会遇到莫名的400错误了。
如果上面还是遇到问题,请参考下面的代码
/article/5036168.html
要在发送请求的时候添加HTTP Basic Authentication认证信息到请求中,有两种方法:
一是在请求头中添加Authorization:
Authorization: "Basic 用户名和密码的base64加密字符串"
二是在url中添加用户名和密码: http://userName:password@api.minicloud.com.cn/statuses/friends_timeline.xml
下面来看下对于第一种在请求中添加Authorization头部的各种语言的实现代码。
先看.NET的吧:
你当然也可以使用HttpWebRequest或者其他的类来发送请求。
这篇文章的代码其实是有点问题的:第一次提交数据会不通过,然后再试的话都是没有问题的,一直不解,直到今天在MSDN上发现了解决方案,贴出代码如下:
protected string HttpPostData(string URL, string strParm, int outTime)
{
StringBuilder str = new StringBuilder();
try
{
HttpWebRequest WRequest;
HttpWebResponse WResponse = null;
HttpWebResponse response = null;
//preAuth the request
// You can add logic so that you only pre-authenticate the very first request.
// You should not have to pre-authenticate each request.
Uri uri = new Uri(URL);
WRequest = (HttpWebRequest)HttpWebRequest.Create(uri);
WRequest.Credentials = new NetworkCredential("wcadmin", "wcadmin");
WRequest.PreAuthenticate = true;
WRequest.UserAgent = "Upload PLM XML";
WRequest.Method = "HEAD";
WRequest.Timeout = outTime;
WResponse = (HttpWebResponse)WRequest.GetResponse();
WResponse.Close();
// Make the real request.
WRequest = (HttpWebRequest)HttpWebRequest.Create(URL);
WRequest.Credentials = new NetworkCredential("wcadmin", "wcadmin");
WRequest.PreAuthenticate = true;
WRequest.UserAgent = "Upload PLM XML";
WRequest.Method = "POST";
WRequest.AllowWriteStreamBuffering = false;
WRequest.Timeout = 10000;
Byte[] postBytes = Encoding.UTF8.GetBytes(strParm);
WRequest.ContentLength = postBytes.Length;
Stream requestStream = WRequest.GetRequestStream();
requestStream.Write(postBytes, 0, postBytes.Length);
requestStream.Close();
try
{
response = (HttpWebResponse)WRequest.GetResponse();
}
catch (WebException e)
{
response = (HttpWebResponse)e.Response;
}
Stream responseStream = response.GetResponseStream();
StreamReader streamReader = new StreamReader(responseStream, Encoding.Default);
while (streamReader.Peek() != -1)
{
str.Append(streamReader.ReadLine());
}
streamReader.Close();
response.Close();
WResponse.Close();
}
catch (Exception error)
{
str.AppendLine(error.Message);
}
return str.ToString();
}
注意英文注释的那一段,通过这个方法即可成功提交数据,不会遇到莫名的400错误了。
如果上面还是遇到问题,请参考下面的代码
/article/5036168.html
要在发送请求的时候添加HTTP Basic Authentication认证信息到请求中,有两种方法:
一是在请求头中添加Authorization:
Authorization: "Basic 用户名和密码的base64加密字符串"
二是在url中添加用户名和密码: http://userName:password@api.minicloud.com.cn/statuses/friends_timeline.xml
下面来看下对于第一种在请求中添加Authorization头部的各种语言的实现代码。
先看.NET的吧:
string username="username"; string password="password"; //注意这里的格式哦,为 "username:password" string usernamePassword = username + ":" + password; CredentialCache mycache = new CredentialCache(); mycache.Add(new Uri(url), "Basic", new NetworkCredential(username, password)); myReq.Credentials = mycache; myReq.Headers.Add("Authorization", "Basic " + Convert.ToBase64String(new ASCIIEncoding().GetBytes(usernamePassword))); WebResponse wr = myReq.GetResponse(); Stream receiveStream = wr.GetResponseStream(); StreamReader reader = new StreamReader(receiveStream, Encoding.UTF8); string content = reader.ReadToEnd();
你当然也可以使用HttpWebRequest或者其他的类来发送请求。
相关文章推荐
- HttpClient4 Post XML数据
- ajax xmlhttprequest使用post传参数并向后台获取数据
- xmlHttpRequest 以Post方式发数据到Asp.net页,在gb2312编码下的解决办法
- xmlHttpRequest 以Post方式发数据到Asp.net页,在gb2312编码下的解决办法
- Firefox3中使用XMLHttpRequest(Ajax)发送二进制POST数据的简易调试法
- 解析HTTP POST方式请求的xml数据、本地XML文件数据, 并返回JSON字符串
- Http Post Xml形式传递数据
- php获取通过http协议post提交过来xml数据及解析xml
- PHP CURL 发送和接收XML数据,并用$HTTP_RAW_POST_DATA接收
- c# xmlhttp POST提取远程webservice数据
- Chrome 下,重复使用 XMLHttpRequest进行Post数据时,遇到一个奇怪的问题
- Java 通过HttpURLConnection Post方式提交xml,并从服务端返回数据
- Java 通过httpClient Post方式提交xml,并从服务端返回数据
- Java 通过HttpURLConnection Post方式提交xml,并从服务端返回数据
- php获取通过http协议post提交过来xml数据及解析xml
- jQuery的ajax()检验用户名;通过jQuery的load()/get()/post()方法实现;使用XMLHTTPRequest对象来进行AJAX的异步数据交互
- HttpClient4 Post XML数据
- HttpWebRequest Post 方式发送 XML数据
- 原始ajax通过xmlHttpRequest对象的send()方法提交数据--Get方式和Post方式
- 微信支付--工具类--通过Https往API post xml数据