`
cjc
  • 浏览: 658696 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

WebResponse 跨域访问

阅读更多
<script>function StorePage(){d=document;t=d.selection?(d.selection.type!='None'?d.selection.createRange().text:''):(d.getSelection?d.getSelection():'');void(keyit=window.open('http://www.365key.com/storeit.aspx?t='+escape(d.title)+'&u='+escape(d.location.href)+'&c='+escape(t),'keyit','scrollbars=no,width=475,height=575,left=75,top=20,status=no,resizable=yes'));keyit.focus();}</script>

前两天,一个朋友让我帮他写这样一个程序:在asp.net里面访问asp的页面,把数据提交对方的数据库后,根据返回的值(返回值为:OK或ERROR),如果为OK再把填入本地数据库。当时,想当然,觉得很简单,用js的xmlhttp ,如果根据response 的值是“OK”就执行提交本地数据库。很快写完发过去,让朋友试试,一试发现不行,后来一问,原来是跨域访问,我给忽略了,于是让朋友把asp改成web service,可朋友说程序是合作公司做的,只会asp,不会用web service ,狂晕ing。没办法,只能请出asp.net的 WebResponse了,很多网站采集程序都是用这个。第一版写完了,倒是可以跨域访问了,不过是乱码,调整有关编码的方式,终于可以了。这个应用虽小可是涉及的知识点不少: 1、xmlhttp 不能跨域提交。 当然XMLHttpRequest还是权宜的解决的方法,可以参考思归写的一篇文章:http://blog.joycode.com/saucer/archive/2006/10/03/84572.aspx

2、webresponse可以进行跨域访问,不过要注意 1)、get和post的区别。 2)、注意Timeout的问题。

这些都是简单的程序,记下来备忘,高手就不必看了。

不废话了,下面是相关的c#代码:

{

{

Uri t_Uri

WebRequest t_WebRequest

t_WebRequest.Timeout

t_WebRequest.Method

{

, paramBytes.Length);

}

WebResponse t_WebResponse

t_WebRequest.GetResponse();

{

}

}

{

}

}

{

{

Uri t_Uri

WebRequest t_WebRequest

WebRequest.Create(t_Uri);

t_WebRequest.Timeout

t_WebRequest.ContentType

t_WebRequest.Method

WebResponse t_WebResponse

t_WebRequest.GetResponse();

{

}

}

{

}

}

{

Uri t_Url

t_parm

t_parm

t_strUrlPath

}

{

POST,

GET

}

///<summary></summary>/// 使用Post方法发送数据////// <param name="”pi_strPostURl”">提交地址/// <param name="”pi_strParm”">参数///<returns></returns> publicstaticstring PostResponse(string pi_strPostURl, string pi_strParm)try//编码 Encoding t_Encoding = Encoding.GetEncoding(“GB2312“); =new Uri(pi_strPostURl); byte[] paramBytes = t_Encoding.GetBytes(pi_strParm);= WebRequest.Create(t_Uri);=100000;//设置ContentType t_WebRequest.ContentType = “application/x-www-form-urlencoded“;= EnumMethod.POST.ToString(); //初始化 using (Stream t_REStream = t_WebRequest.GetRequestStream())//发送数据 requestStream.Write(paramBytes, 0=using (StreamReader t_StreamReader =new StreamReader(t_WebResponse .GetResponseStream(), t_Encoding))return t_StreamReader.ReadToEnd();catchreturn “ERROR“;publicstaticstring GetResponse(string pi_strPostURl, string pi_strParm)try//编码 Encoding t_Encoding = Encoding.GetEncoding(“GB2312“); =new Uri(string.Format(“{0}?{1}“, pi_strPostURl, pi_strParm));==100000;= “application/x-www-form-urlencoded“;= EnumMethod.GET.ToString(); =using (StreamReader t_StreamReader =new StreamReader(t_WebResponse.GetResponseStream(), t_Encoding))return t_StreamReader.ReadToEnd();catch (Exception e)return e.ToString();publicstaticstring AtionResponse(string pi_Url, EnumMethod pi_Method)string t_strUrlPath=“”;string t_parm = “”; =new Uri(pi_Url); = t_Url.Query;if (parmString.StartsWith(“?“))= t_parm.Remove(0, 1); = “http://“ + t_Url .Authority + t_Url .AbsolutePath; return GetResponse(t_strUrlPath, t_parm, pi_Method);publicenum EnumMethod

本文首发地址:http://www.watch-life.net/aspnet/webresponse-cross-site-visit.html

更多文章见:守望轩[http://www.watch-life.net]

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics