前两天,一个朋友让我帮他写这样一个程序:在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#代码:
/// <summary>
/// 使用Post方法发送数据
/// </summary>
/// <param name=”pi_strPostURl”>提交地址</param>
/// <param name=”pi_strParm”>参数</param>
/// <returns></returns>
public static string PostResponse(string pi_strPostURl, string pi_strParm)
{
try
{
//编码
Encoding t_Encoding = Encoding.GetEncoding(“GB2312“);
Uri t_Uri = new Uri(pi_strPostURl);
byte[] paramBytes = t_Encoding.GetBytes(pi_strParm);
WebRequest t_WebRequest = WebRequest.Create(t_Uri);
t_WebRequest.Timeout = 100000;
//设置ContentType
t_WebRequest.ContentType = “application/x-www-form-urlencoded“;
t_WebRequest.Method = EnumMethod.POST.ToString(); //初始化
using (Stream t_REStream = t_WebRequest.GetRequestStream())
{
//发送数据
requestStream.Write(paramBytes, 0
, paramBytes.Length);
}
WebResponse t_WebResponse =
t_WebRequest.GetResponse();
using (StreamReader t_StreamReader = new StreamReader(t_WebResponse .GetResponseStream(), t_Encoding))
{
return t_StreamReader.ReadToEnd();
}
}
catch
{
return “ERROR“;
}
}
public static string GetResponse(string pi_strPostURl, string pi_strParm)
{
try
{
//编码
Encoding t_Encoding = Encoding.GetEncoding(“GB2312“);
Uri t_Uri = new Uri(string.Format(“{0}?{1}“, pi_strPostURl, pi_strParm));
WebRequest t_WebRequest =
WebRequest.Create(t_Uri);
t_WebRequest.Timeout = 100000;
t_WebRequest.ContentType = “application/x-www-form-urlencoded“;
t_WebRequest.Method = EnumMethod.GET.ToString();
WebResponse t_WebResponse =
t_WebRequest.GetResponse();
using (StreamReader t_StreamReader = new StreamReader(t_WebResponse.GetResponseStream(), t_Encoding))
{
return t_StreamReader.ReadToEnd();
}
}
catch (Exception e)
{
return e.ToString();
}
}
public static string AtionResponse(string pi_Url, EnumMethod pi_Method)
{
string t_strUrlPath=“”;
string t_parm = “”;
Uri t_Url = new Uri(pi_Url);
t_parm= t_Url.Query;
if (parmString.StartsWith(“?“))
t_parm = t_parm.Remove(0, 1);
t_strUrlPath = “http://“ + t_Url .Authority + t_Url .AbsolutePath;
return GetResponse(t_strUrlPath, t_parm, pi_Method);
}
public enum EnumMethod
{
POST,
GET
}
本文地址:http://www.watch-life.net/aspnet/webresponse-cross-site-visit.html
分享到:
相关推荐
本文将通过一个具体的实例,讲解如何使用`WebResponse`来实现跨域访问,以及在此过程中需要注意的关键知识点。 首先,让我们明确一点,JavaScript中的`XMLHttpRequest`对象默认不允许跨域请求,但ASP.NET的`...
如果目标服务器有并发请求限制,或者对单个IP的访问频率有限制,可能会导致请求被延迟或超时。检查服务器的策略和配置。 7. **代码优化**: 代码中使用了`GetResponse()`方法,该方法会阻塞直到服务器返回响应。...
这种方法的限制是无法从其他域读取敏感数据,但如果是公共数据且目标网站允许跨域访问,可以使用此方法。 2. 服务器代理跨域方法 这种方法涉及到在服务器端进行中转,先从服务器端向其他域发出请求,获取数据后,再...
"WebResponse"是.NET Framework中的一个关键类,它用于处理从Web服务器接收的响应数据。让我们深入探讨这个主题。 首先,我们需要理解HTTP(超文本传输协议)。它是互联网上应用最广泛的一种网络协议,用于从万维网...
C#作为.NET框架的主要编程语言,使用.NET可以方便地访问各种系统资源,同时享受跨平台(通过.NET Core)的便利。 压缩包中的“InfoCutter”可能是指一个具体的源代码文件或者模块,它可能是爬虫程序的一部分,负责...
使用HttpUnit进行集成测试使用HttpUnit进行集成测试使用HttpUnit进行集成测试使用HttpUnit进行集成测试
using (WebResponse response = wr.GetResponse()) { Stream responseStream = response.GetResponseStream(); byte[] buffer = new byte[BUFFER_SIZE]; int bytesRead; StringBuilder sb = new StringBuilder...
在本例中,我们通过`WebRequest.Create(url)`静态方法来实例化一个用于HTTP协议的`HttpWebRequest`对象,其中`url`参数是我们要访问的网页URL。 2. **WebResponse**: 这是`WebRequest`的抽象子类,用于接收来自...
在现代的计算机网络环境中,访问Internet是日常工作中不可或缺的一部分。"使用net访问Internet"这个主题主要涵盖的是如何利用.NET框架进行网络通信,实现对互联网资源的访问和操作。本文将深入探讨.NET框架在网络...
本示例将深入探讨如何利用.NET框架中的WebRequest和WebResponse类来实现一个简单的网络下载任务,即下载Bing每日背景图片。Bing背景图片以其高质量的图像和多样化的主题而闻名,是许多用户桌面壁纸的首选。 首先,...
WebRequest和WebResponse类是更底层的网络访问接口,提供更强大的功能和灵活性: (1) WebRequest类与WebResponse类简介:它们是.NET Framework的基础网络请求和响应抽象类,支持多种网络协议,如HTTP、FTP和Gopher...
- **`UserAgent`**: 设置请求头中的`User-Agent`字段,模拟浏览器访问。 ##### 3. 处理HTTP响应 发送请求后,我们通过`GetResponse()`方法获取响应对象`HttpWebResponse`,进而可以读取响应内容。 **示例代码分析...
9. **代理配置**:如果测试环境需要通过代理服务器访问网络,可以通过以下方式配置代理。 ```java System.getProperties().put("proxySet", "true"); System.getProperties().put("proxyHost", "proxy.example....
由于Silverlight有跨域限制,你需要在Web服务的Web.config中添加允许跨域访问的配置: ```xml *" /> ``` ### 6. 错误处理与优化 在实际开发中,还需要考虑错误处理,如网络异常、文件...
在.NET框架中,`System.Net`命名空间中最关键的两个类是`WebRequest`和`WebResponse`。这两个类都是抽象类,提供了创建网络请求和处理网络响应的基础。通过以下步骤可以演示如何使用这些类来获取资源: 1. **创建...
DNS WebClient WebRequest WebResponse WebProxy TCP通信
在Windows Phone平台上,为了确保应用程序的流畅性和响应性,官方推荐使用异步编程模式来处理那些可能会导致用户界面(UI)冻结的操作,如网络请求、数据库访问等。本文将详细介绍Windows Phone平台上的三种主要异步...
HttpWebRequest: ...使用HttpWebRequest可以让开发者控制请求/响应流程的各个方面,如 timeouts, cookies, headers, protocols。...HttpWebRquest更为底层一些,能够对整个访问过程有个直观的认识,但同时也更加复
WebResponse _WebResponse = _WebRequest.GetResponse(); StreamReader _ResponseStream = new StreamReader(_WebResponse.GetResponseStream(), System.Text.Encoding.GetEncoding("gb2312")); _StrResponse = _...