2011-06-30 72 views
0

从stackoverflow阅读各种帖子和其他人的帮助后,我在我的代码中进行身份验证,并试图避免以前发生的重定向,因为我是所有这些东西的新手。我开始收到302 Found的错误,文档已移动。302找到文档已移动错误

我想通过在jsp中编写一些代理代码在本地从我的计算机向其他域调用ajax。这是我调用proxy.jsp页面的jQuery AJAX代码。

var search_agile_metadata = 'https://search.xyz.com/ag/se/ag/get?id='; 

var on_show_info = function() { 
       //alert("aa"); 
    var outOfDomainAjaxCall = search_agile + current_doc_info.id;//An XML document 
    alert(outOfDomainAjaxCall); 
       request_meta_info = $.ajax({ 
       url: "proxy.jsp?url=" + outOfDomainAjaxCall, 
       type: 'GET', 
       success: on_get_metadata, 
       error: on_get_metadata_agile 

     }); 

而且我proxy.jsp文件是: -

<%@ page language="java" import="org.apache.http.impl.client.AbstractHttpClient, 
org.apache.http.client.methods.HttpUriRequest, 
org.apache.http.client.methods.HttpGet, 
org.apache.http.protocol.HttpContext, 
org.apache.http.impl.client.DefaultHttpClient, 
org.apache.http.HttpResponse 
,org.apache.http.HttpRequest, 
java.net.HttpURLConnection, 
java.net.URL, 
java.util.Collection, 
org.apache.commons.httpclient.HttpClient, 
org.w3c.dom.*, 
javax.xml.parsers.DocumentBuilder, 
javax.xml.parsers.DocumentBuilderFactory, 
java.net.*, 
java.io.*, 
org.apache.http.protocol.BasicHttpContext, 
org.apache.http.params.BasicHttpParams, 
org.apache.http.params.HttpParams, 
org.apache.http.Header, 
org.apache.http.client.params.HttpClientParams" 
contentType="text/html; charset=ISO-8859-1" 
pageEncoding="ISO-8859-1"%> 

<% 
String a_Url = request.getParameter("url") ; 

URL url = new URL (a_Url); 
String encoding = new String(
     org.apache.commons.codec.binary.Base64.encodeBase64 
      (org.apache.commons.codec.binary.StringUtils.getBytesUtf8("test:test")) 
     ); 


HttpURLConnection connection = (HttpURLConnection) url.openConnection(); 
connection.setRequestMethod("GET"); 
connection.setDoOutput(true); 
connection.setFollowRedirects(false); 
connection.setRequestProperty ("Authorization", "Basic " + encoding); 
InputStream content = (InputStream)connection.getInputStream(); 
BufferedReader in = 
    new BufferedReader (new InputStreamReader (content)); 
String line; 
while ((line = in.readLine()) != null) { 
    out.println(line); 
} 

%> 

<% 
final HttpParams params = new BasicHttpParams(); 
HttpClientParams.setRedirecting(params, false); 
%> 

当我得到响应从服务器返回。我得到这个错误。任何想法,为什么我收到此错误回来..

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> 
<html><head> 
<title>302 Found</title> 
</head><body> 
<h1>Found</h1> 
<p>The document has moved <a href="https://ln.xyz.com/site/n/13000/smscc?TYPE=16777217&amp;R">here</a>.</p> 
<hr> 
<address>Apache/2.0.58 (Unix) DAV/2 mod_jk/1.2.28 Server at search.xyz.com Port 80</address> 
</body></html> 

任何帮助将不胜感激..

回答

3

这是不是一个错误。这是一封非正式的消息。该请求刚刚被重定向。这是一个3nn的回应。只有HTTP 4NN和5NN反应是错误的(4NN =客户端错误和5NN =服务器错误)

你的具体问题是,你告诉HttpURLConnection遵循以下设置重定向:

connection.setFollowRedirects(false); 

因此,您看到的是非正式消息,而不是自动重定向到新请求。你还是告诉它遵循重定向:

connection.setFollowRedirects(true); 

无关的问题:请注意,您没有充分利用Apache的HttpClient的API在这里。您只是使用标准的Java SE URLConnection API来建立HTTP连接。该行

HttpClientParams.setRedirecting(params, false); 

URLConnection行为完全没有影响。你应该选择使用这一个或另一个。标准URLConnection API Apache HttpClient。

另请注意,将Java代码写入JSP文件而不是Java类是一种不好的做法。你应该使用一个servlet来完成这项工作。