0x80070005,跨域访问
最近在弄一个sip网页集成版软电话,为了功能的完善,呼叫中心的工作人员为我们提供了一个http接口,我先在网页中直接打开分析了一下他的返回值,然后又放到js中去访问,结果一放到js中一访问就发现浏览器会提示:
刚开始我百思不得其解,查询过表头中未找到源http://localhost:8080,原本我还以为是在发送的时候我的表头有问题,但是用html5设置表头尝试了几次,发现还是提示一样的问题,于是我又在网上查询了一下0x80070005这个错误代码,网上提示说是属于跨域了,于是我又跟着网上的方法试了一下:
方法一:get方式获取
$.ajax({ dataType:'jsonp',
url:"http://10.0.0.230/asterccinterfaces?EVENT=GetCdr&orgidentity=dc&user=7501&password=7501&pwdtype=plaintext",
date:'get'
success: function(data){ alert(data) } ,
});
对于跨域的访问,只能使用get,并且要设置dataType,有的朋友这个样设置之后就可以成功运行了,但是很可惜也不知道是电脑的设置问题还是什么,反正这个方法在我这里无效,于是我又继续尝试,突然就想到了浏览器的安全权限设置,于是有了方法二
方法二:浏览器安全站点设置
1.将访问地址加入受信任站点:http://10.0.0.230
2.点击自定义,将通过域访问数据源设置为启用
这种方法如果是固定电脑使用的话,那还是蛮方便的,但是如果大面积的客户端访问服务器那就不行了,毕竟我们不可能让每一个客户都修改自己的浏览器吧,更何况有的人还不会,特别是一些商业网,这是更不允许的。因此这个方法建议大家视情况而用。
方法三:后台发送请求接收返回数据:参照
publicclass HttpInvoker
{
publicstaticfinal="http://10.0.0.230/asterccinterfaces";
publicstaticfinal="http://10.0.0.230/asterccinterfaces";
publicstaticvoidthrows IOException
{
//
=+"??EVENT=GetCdr&orgidentity=dc&user=7501&password=7501&pwdtype=plaintext&username="+"fat man", "utf-8");
URL getUrl =new URL(getURL);
// 根据拼凑的URL,打开连接,URL.openConnection函数会根据URL的类型,
//
= (HttpURLConnection) getUrl.openConnection();
// 进行连接,但是实际上get request要在下一句的connection.getInputStream()函数中才会真正发到
//
connection.connect();
//
=newnew InputStreamReader(
connection.getInputStream()));
System.out.println("=============================");
System.out.println("Contents of get request");
System.out.println("=============================");
String lines;
while=!=null)
{
System.out.println(lines);
}
reader.close();
//
connection.disconnect();
System.out.println("=============================");
System.out.println("Contents of get request ends");
System.out.println("=============================");
}
publicstaticvoidthrows IOException
{
//
=new URL(POST_URL);
//
= (HttpURLConnection) postUrl.openConnection();
// Output to the connection. Default is
// false, set to true because post
// method must write something to the
// connection
// 设置是否向connection输出,因为这个是post请求,参数要放在
//
true);
//
true);
//
"POST");
// Post cannot use caches
//
false);
// This method takes effects to
// every instances of this class.
// URLConnection.setFollowRedirects是static函数,作用于所有的URLConnection对象。
// connection.setFollowRedirects(true);
// This methods only
// takes effacts to this
// instance.
//
true);
// Set the content type to urlencoded,
// because we will write
// some URL-encoded content to the
// connection. Settings above must be set before connect!
// 配置本次连接的Content-type,配置为application/x-www-form-urlencoded的
// 意思是正文是urlencoded编码过的form参数,下面我们可以看到我们对正文内容使用URLEncoder.encode
//
"Content-Type", "application/x-www-form-urlencoded");
// 连接,从postUrl.openConnection()至此的配置必须要在connect之前完成,
//
connection.connect();
DataOutputStream out =new DataOutputStream(connection
.getOutputStream());
// The URL-encoded contend
//
="