httprequester 怎么发送post请求
1个回答
展开全部
通过程序发送POST的过程如下所示:
1. 创建httpWebRequest对象
HttpWebRequest不能直接通过new来创建,只能通过WebRequest.Create(url)的方式来获得。
WebRequest是获得一些列应用层协议对象的一个统一的入口(工厂模式),它根据参数的协议来确定最终创建的对象类型。所以我们的程序里面有一个对返回对象的类型进行测试的过程。
2. 初始化HttpWebRequest对象
这个过程提供一些http请求常用的属性:agentstring,contenttype
等其中agentstring比较有意思,它是用来识别你用的浏览器名字的,通过设置这个属性你可以欺骗服务器你是一个IE,firefox甚至是mac
里面的safari。很多认真设计的网站都会根据这个值来返回对用户浏览器特别优化过的代码。
3. 附加要POST给服务器的数据到HttpWebRequest对象
附加POST数据的过程比较特殊,它并没有提供一个属性给用户存取,需要写入HttpWebRequest对象提供的一个stream里面。
4. 读取服务器的返回信息
读取服务器返回的时候,要注意返回数据的encoding。如果我们提供的解码类型不对会造
成乱码。比较常见的是utf-8和gb2312之间的混淆,据我测试,国内的主机一般都是gb2312编码的。一般设计良好的网站会把它编码的方式放在返
回的http header里面,但是也有不少网站根本没有,我们只能通过一个对返回二进制值的统计方法来确定它的编码方式。
[csharp] view plain copy
using System;
using System.Collections.Generic;
using System.Text;
using System.Net;
using System.IO;
namespace SimpleWebRequest
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine(
PostDataToUrl("test", "http://www.microsoft.com")
);
}
///<summary>
/// Post data到url
///</summary>
///<param name="data">要post的数据</param>
///<param name="url">目标url</param>
///<returns>服务器响应</returns>
static string PostDataToUrl(string data, string url)
{
Encoding encoding = Encoding.GetEncoding(sRequestEncoding);
byte[] bytesToPost = encoding.GetBytes(data);
return PostDataToUrl(bytesToPost, url);
}
///<summary>
/// Post data到url
///</summary>
///<param name="data">要post的数据</param>
///<param name="url">目标url</param>
///<returns>服务器响应</returns>
static string PostDataToUrl(byte[] data, string url)
{
#region 创建httpWebRequest对象
WebRequest webRequest = WebRequest.Create(url);
HttpWebRequest httpRequest = webRequest as HttpWebRequest;//as用于类型转换
if (httpRequest == null)
{
throw new ApplicationException(
string.Format("Invalid url string: {0}", url)
);
}
#endregion
#region 填充httpWebRequest的基本信息
httpRequest.UserAgent = sUserAgent;
httpRequest.ContentType = sContentType;
httpRequest.Method = "POST";
#endregion
#region 填充要post的内容
httpRequest.ContentLength = data.Length;
Stream requestStream = httpRequest.GetRequestStream();
requestStream.Write(data, 0, data.Length);
requestStream.Close();
#endregion
#region 发送post请求到服务器并读取服务器返回信息
Stream responseStream;
try
{
responseStream = httpRequest.GetResponse().GetResponseStream();
}
catch(Exception e)
{
// log error
Console.WriteLine(
string.Format("POST操作发生异常:{0}", e.Message)
);
throw e;
}
#endregion
#region 读取服务器返回信息
string stringResponse = string.Empty;
using(StreamReader responseReader =
new StreamReader(responseStream, Encoding.GetEncoding(sResponseEncoding)))
{
stringResponse = responseReader.ReadToEnd();
}
responseStream.Close();
#endregion
return stringResponse;
}
const string sUserAgent =
"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727)";
const string sContentType =
"application/x-www-form-urlencoded";
const string sRequestEncoding = "ascii";
const string sResponseEncoding = "gb2312";
}
}
1. 创建httpWebRequest对象
HttpWebRequest不能直接通过new来创建,只能通过WebRequest.Create(url)的方式来获得。
WebRequest是获得一些列应用层协议对象的一个统一的入口(工厂模式),它根据参数的协议来确定最终创建的对象类型。所以我们的程序里面有一个对返回对象的类型进行测试的过程。
2. 初始化HttpWebRequest对象
这个过程提供一些http请求常用的属性:agentstring,contenttype
等其中agentstring比较有意思,它是用来识别你用的浏览器名字的,通过设置这个属性你可以欺骗服务器你是一个IE,firefox甚至是mac
里面的safari。很多认真设计的网站都会根据这个值来返回对用户浏览器特别优化过的代码。
3. 附加要POST给服务器的数据到HttpWebRequest对象
附加POST数据的过程比较特殊,它并没有提供一个属性给用户存取,需要写入HttpWebRequest对象提供的一个stream里面。
4. 读取服务器的返回信息
读取服务器返回的时候,要注意返回数据的encoding。如果我们提供的解码类型不对会造
成乱码。比较常见的是utf-8和gb2312之间的混淆,据我测试,国内的主机一般都是gb2312编码的。一般设计良好的网站会把它编码的方式放在返
回的http header里面,但是也有不少网站根本没有,我们只能通过一个对返回二进制值的统计方法来确定它的编码方式。
[csharp] view plain copy
using System;
using System.Collections.Generic;
using System.Text;
using System.Net;
using System.IO;
namespace SimpleWebRequest
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine(
PostDataToUrl("test", "http://www.microsoft.com")
);
}
///<summary>
/// Post data到url
///</summary>
///<param name="data">要post的数据</param>
///<param name="url">目标url</param>
///<returns>服务器响应</returns>
static string PostDataToUrl(string data, string url)
{
Encoding encoding = Encoding.GetEncoding(sRequestEncoding);
byte[] bytesToPost = encoding.GetBytes(data);
return PostDataToUrl(bytesToPost, url);
}
///<summary>
/// Post data到url
///</summary>
///<param name="data">要post的数据</param>
///<param name="url">目标url</param>
///<returns>服务器响应</returns>
static string PostDataToUrl(byte[] data, string url)
{
#region 创建httpWebRequest对象
WebRequest webRequest = WebRequest.Create(url);
HttpWebRequest httpRequest = webRequest as HttpWebRequest;//as用于类型转换
if (httpRequest == null)
{
throw new ApplicationException(
string.Format("Invalid url string: {0}", url)
);
}
#endregion
#region 填充httpWebRequest的基本信息
httpRequest.UserAgent = sUserAgent;
httpRequest.ContentType = sContentType;
httpRequest.Method = "POST";
#endregion
#region 填充要post的内容
httpRequest.ContentLength = data.Length;
Stream requestStream = httpRequest.GetRequestStream();
requestStream.Write(data, 0, data.Length);
requestStream.Close();
#endregion
#region 发送post请求到服务器并读取服务器返回信息
Stream responseStream;
try
{
responseStream = httpRequest.GetResponse().GetResponseStream();
}
catch(Exception e)
{
// log error
Console.WriteLine(
string.Format("POST操作发生异常:{0}", e.Message)
);
throw e;
}
#endregion
#region 读取服务器返回信息
string stringResponse = string.Empty;
using(StreamReader responseReader =
new StreamReader(responseStream, Encoding.GetEncoding(sResponseEncoding)))
{
stringResponse = responseReader.ReadToEnd();
}
responseStream.Close();
#endregion
return stringResponse;
}
const string sUserAgent =
"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727)";
const string sContentType =
"application/x-www-form-urlencoded";
const string sRequestEncoding = "ascii";
const string sResponseEncoding = "gb2312";
}
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询