用jsp做代理,ajax跨域发post
我的客户端需要从公司的server上获取数据,他们提供的接口是 发送post到http://aqueduc.kelcode.com/proc/gw.php
后面跟上一些参数,然后就可以得到我想要的json数据。
我先通过在网页上直接用ajax发送post到公司的server,但是失败。在网上查的结果是js跨域访问危险地,所以不支持(IE在提示风险并继续运行的情况下可以用)。从网上得到的建议是:我可以通过jsp作为代理,从浏览器发post给proxy.jsp,再由proxy.jsp从本地server把想要发送的post请求发给公司的server,再把数据传回客户端。下面是我改写的代码。但总是得到http 500的错误。我不太会web编程。jsp也是现学的,连debug都不知道怎么弄。是不是有什么配置上的问题,还是我的代码有错误,或者是思路都是不对的。非常着急,再做不出来就要被炒了。请求大家帮忙。
这个用单纯的java写的代码给公司server发送post是可以得到正确的结果的,我已经测试过了。
[code=JScript][/code]
<SCRIPT LANGUAGE="JavaScript" type="text/javascript">
function loadJson()
{
var xmlhttp = false;
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
if (XMLHttpRequest.overrideMimeType)
{
XMLHttpRequest.overrideMimeType("text/xml");
}
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
if(!xmlhttp)
{
window.alert("不能创建对象");
return false;
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
}
else
document.getElementById("myDiv").innerHTML=xmlhttp.status+"-"+xmlhttp.readyState;
}
xmlhttp.open("POST","proxy.jsp",true);
xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
xmlhttp.send("url=http://aqueduc.kelcode.com/proc/gw.php&requestName=getIntervention&uid=UID_GATEWAY&startDate=1292223600&endDate=1408330000");
}
</script>
[code=HTML][/code]
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>test</title>
</head>
<body>
<button type="button" onclick="loadJson()">请求数据</button>
</body>
</html>
proxy.jsp
[code=Java][/code]
<%@ page import="java.net.*,java.util.*,java.lang.*,java.io.*"%>
<%@ page contentType="text/xml;charset=gb2312"%>
<%
String url = null;
StringBuffer params = new StringBuffer();
Enumeration enu = request.getParameterNames();
int total = 0;
while (enu.hasMoreElements()) {
String paramName=(String)enu.nextElement();
if(paramName.equals("url")){
url=request.getParameter(paramName);
}else{
if(total==0){
params.append(paramName).append("=").append(URLEncoder.encode(request.getParameter(paramName), "UTF-8"));
} else {
params.append("&").append(paramName).append("=").append(URLEncoder.encode(request.getParameter(paramName), "UTF-8"));
}
++total;
}
}
String para = params.toString();
//out.println(url);
if(url != null){
// 使用GET方式向目的服务器发送请求
URL connect = new URL(url.toString());
URLConnection connection = connect.openConnection();
connection.setDoOutput(true);
connection.setDoInput(true);
connection.setRequestMethod("POST");
connection.setRequestProperty("Content-type","application/x-www-form-urlencoded");