2011-06-30 71 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來完成這項工作。