Ajax跨域访问代理类,支持GET和POST方法
支持GET和POST两种方式
使用方法:http://localhost:4817/AppContainer/HttpProxy.ashx?httpproxy_request_url=http://www.g.cn&httpproxy_chars_set=gbk
1
<%@ WebHandler Language="C#" Class="HttpProxy" %>2

3
using System;4
using System.Web;5
using System.Text;6

7
public class HttpProxy : IHttpHandler8


{9

10
public void ProcessRequest(HttpContext context)11

{12
HttpRequest Request = context.Request;13
HttpResponse Response = context.Response;14
try15

{16
string method = Request.HttpMethod;17
System.Collections.Specialized.NameValueCollection data = new System.Collections.Specialized.NameValueCollection();18
if (method == "POST")19

{20
data.Add(Request.Form);21
}22
else23

{24
data.Add(Request.QueryString);25
}26
string request_url = data["httpproxy_request_url"];27
string chars_set = data["httpproxy_chars_set"];28
if (string.IsNullOrEmpty(chars_set))29

{30
chars_set = "gbk";31
}32
Response.ContentEncoding = System.Text.Encoding.GetEncoding(chars_set);33
if (string.IsNullOrEmpty(request_url))34

{35
Response.Write("请求地址不能为空.");36
Response.End();37
}38
else39

{40
data.Remove("httpproxy_request_url");41
data.Remove("httpproxy_chars_set");42
string postdata = HttpHelper.ToNameValueString(data);43
string result = string.Empty;44
if (method == "POST")45

{46
result = HttpHelper.Post(request_url, postdata, chars_set);47
}48
else49

{50

51
result = HttpHelper.Get(request_url, chars_set);52
}53
Response.Write(result);54
Response.End();55
}56
}57
catch (Exception ex)58

{59
Response.Write("请求发生错误:" + ex.ToString());60
Response.End();61
}62
}63

64
public bool IsReusable65

{66
get67

{68
return false;69
}70
}71

72
}
1
using System.Text;2
using System.Net;3
using System.IO;4
using System.Collections.Specialized;5

6

7
public class HttpHelper8


{9

/**//// <summary>10
/// 向指定地址发送POST请求11
/// </summary>12
/// <param name="getUrl">指定的网页地址</param>13
/// <param name="postData">POST的数据(格式为:p1=v1&p1=v2)</param>14
/// <param name="chars_set">可采用如UTF-8,GB2312,GBK等</param>15
/// <returns>页面返回内容</returns>16
public static string Post(string postUrl, string postData, string chars_set)17

{18
Encoding encoding = Encoding.GetEncoding(chars_set);19
HttpWebRequest Request = (HttpWebRequest)WebRequest.Create(postUrl);20
Request.Method = "POST";21
Request.ContentType = "application/x-www-form-urlencoded";22
Request.AllowAutoRedirect = true;23
byte[] postdata = encoding.GetBytes(postData);24
using (Stream newStream = Request.GetRequestStream())25

{26
newStream.Write(postdata, 0, postdata.Length);27
}28
using (HttpWebResponse response = (HttpWebResponse)Request.GetResponse())29

{30
using (Stream stream = response.GetResponseStream())31

{32
using (StreamReader reader = new StreamReader(stream, encoding, true))33

{34
return reader.ReadToEnd();35
}36
}37
}38
}39

40

/**//// <summary>41
/// 想地址发送GET请求42
/// </summary>43
/// <param name="getUrl">地址(格式:http://host/page?p1=v1&p2=v2</param>44
/// <param name="chars_set">可采用如UTF-8,GB2312,GBK等</param>45
/// <returns>页面返回内容</returns>46
public static string Get(string getUrl, string chars_set)47

{48
CookieContainer cookie = new CookieContainer();49
HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(getUrl);50
myRequest.AllowAutoRedirect = true;51
myRequest.CookieContainer = cookie;52
using (HttpWebResponse myresponse = (HttpWebResponse)myRequest.GetResponse())53

{54
myresponse.Cookies = cookie.GetCookies(myRequest.RequestUri);55
using (Stream mystream = myresponse.GetResponseStream())56

{57
using (StreamReader myreader = new StreamReader(mystream, System.Text.Encoding.GetEncoding(chars_set), true))58

{59
return myreader.ReadToEnd();60
}61
}62
}63
}64

/**//// <summary>65
/// 生成NameValueCollection字符串66
/// 字符串格式如下:p1=v1&p2=v2&p3=v3&p4=v467
/// </summary>68
/// <param name="data"></param>69
/// <returns>字符串格式如下:p1=v1&p2=v2&p3=v3&p4=v4</returns>70
public static string ToNameValueString(NameValueCollection data)71

{72
StringBuilder sb = new StringBuilder();73
for (int i = 0; i < data.Count; i++)74

{75
if (i != 0) sb.Append("&");76
sb.Append(data.GetKey(i)).Append("=").Append(data[i]);77
}78
return sb.ToString();79
}80
}81

浙公网安备 33010602011771号