在某些网站没有会发生"远程服务器返回错误: (403) 已禁止。"错误
则要加上request.userAgent属性
HttpWebRequest request = null; //提交
HttpWebResponse response = null; //返回
Request.Method = "POST";//数据提交方式
request.Host = "user.51sole.com"; //提交网址前缀
request.ContentType = "application/x-www-form-urlencoded; charset=UTF-8"; //提交的值编码形式
request.Headers.Add("Cookie:lang=zh-cn;" ) //手动添加提交cookie值
Request.AllowAutoRedirect = false; // 是否需要自动跳转
//如果是GET设置好提交头,和必要cookie返回数据即可
response = (HttpWebResponse)request.GetResponse();
StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
string content = sr.ReadToEnd(); //返回response数据
sr.Close();
if (response != null)
{
response.Close();
response = null;
}
request.Abort();
request= null;
如果是post,提交参数:
string postdata = "ProductName=咸丰重宝拍卖行情一路看涨&ProductID=0";//模拟请求数据
//提交请求
byte[] postdatabytes = Encoding.UTF8.GetBytes(postdata);
request.ContentLength = postdatabytes.Length;
using (Stream stream = request.GetRequestStream())
{
//设置POST 数据
stream.Write(postdatabytes, 0, postdatabytes.Length);
stream.Close();
}
response = (HttpWebResponse)request.GetResponse();
StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
string content = sr.ReadToEnd(); //返回response
sr.Close();
if (response != null)
{
response.Close();
response = null;
}
request.Abort();
request= null;
常用参数Post封装:
public static string Post(string url, Dictionary<object, object> param)
{
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.UserAgent = "RK_C# 1.1";
//request.Timeout = 30000; //连接超时
#region POST方法
//如果需要POST数据
if (!(param == null || param.Count == 0))
{
StringBuilder buffer = new StringBuilder();
int i = 0;
foreach (string key in param.Keys)
{
if (i > 0)
{
buffer.AppendFormat("&{0}={1}", key, param[key]);
}
else
{
buffer.AppendFormat("{0}={1}", key, param[key]);
}
i++;
}
byte[] data = System.Text.Encoding.UTF8.GetBytes(buffer.ToString());
try
{
using (Stream stream = request.GetRequestStream())
{
stream.Write(data, 0, data.Length);
}
}
catch {
return "无法连接.请检查网络.";
}
}
常用参数Post调用:
var param = new Dictionary<object, object>
{
{"username","a1003434346"},
{"password","a2912695"},
{"typeid","5000"},
{"timeout","90"},
{"softid","102925"},
{"softkey","af8b9ca0addc4e0d8096891cc8466b5e"}
};
string httpResult = Post("http://api.ruokuai.com/create.xml", param, data);
带图片Post封装:
/// <summary>
/// HTTP POST方式请求数据(带图片)
/// </summary>
/// <param name="url">URL</param>
/// <param name="param">POST的数据</param>
/// <param name="fileByte">图片Byte</param>
/// <returns></returns>
public static string Post(string url, IDictionary<object, object> param, byte[] fileByte)
{
string boundary = "---------------------------" + DateTime.Now.Ticks.ToString("x");
byte[] boundarybytes = System.Text.Encoding.ASCII.GetBytes("\r\n--" + boundary + "\r\n");
HttpWebRequest wr = (HttpWebRequest)WebRequest.Create(url);
wr.ContentType = "multipart/form-data; boundary=" + boundary;
wr.UserAgent = "RK_C# 1.2";
wr.Method = "POST";
//wr.Timeout = 150000;
//wr.KeepAlive = true;
//wr.Credentials = System.Net.CredentialCache.DefaultCredentials;
Stream rs = null;
try
{
rs = wr.GetRequestStream();
}
catch { return "无法连接.请检查网络."; }
string responseStr = null;
string formdataTemplate = "Content-Disposition: form-data; name=\"{0}\"\r\n\r\n{1}";
foreach (string key in param.Keys)
{
rs.Write(boundarybytes, 0, boundarybytes.Length);
string formitem = string.Format(formdataTemplate, key, param[key]);
byte[] formitembytes = System.Text.Encoding.UTF8.GetBytes(formitem);
rs.Write(formitembytes, 0, formitembytes.Length);
}
rs.Write(boundarybytes, 0, boundarybytes.Length);
string headerTemplate = "Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\nContent-Type: {2}\r\n\r\n";
string header = string.Format(headerTemplate, "image", "i.gif", "image/gif");//image/jpeg
byte[] headerbytes = System.Text.Encoding.UTF8.GetBytes(header);
rs.Write(headerbytes, 0, headerbytes.Length);
rs.Write(fileByte, 0, fileByte.Length);
byte[] trailer = System.Text.Encoding.ASCII.GetBytes("\r\n--" + boundary + "--");
rs.Write(trailer, 0, trailer.Length);
rs.Close();
WebResponse wresp = null;
try
{
wresp = wr.GetResponse();
Stream stream2 = wresp.GetResponseStream();
StreamReader reader2 = new StreamReader(stream2);
responseStr = reader2.ReadToEnd();
}
catch
{
//throw;
}
finally
{
if (wresp != null)
{
wresp.Close();
wresp = null;
}
wr.Abort();
wr = null;
}
return responseStr;
}
带图片调用:
byte[] data;
//把Image转换为byte
using (MemoryStream ms = new MemoryStream())
{
img.Save(ms, img.RawFormat);
ms.Position = 0;
data = new byte[ms.Length];
ms.Read(data, 0, Convert.ToInt32(ms.Length));
ms.Flush();
}
var param = new Dictionary<object, object>
{
{"username","a1003434346"},
{"password","a2912695"},
{"typeid","5000"},
{"timeout","90"},
{"softid","102925"},
{"softkey","af8b9ca0addc4e0d8096891cc8466b5e"}
};
string httpResult = Post("http://api.ruokuai.com/create.xml", param, data);
未完待续...