2011-06-29 133 views
0

我想通過JSP編寫一些代理代碼,使我的電腦上Ajax調用本地其他域獲得URL的內容時,302找到錯誤。這是我調用proxy.jsp頁面的jQuery AJAX代碼。嘗試使用JSP

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

var on_show_info = function() { 
var outOfDomainCall = search_agile_metadata + current_doc_info.id;//An XML document 

       request_meta_info = $.ajax({ 
       url: "proxy.jsp?url=" + outOfDomainCall , 
       type: 'GET', 
       success: on_get_metadata, 
       error: on_get_metadata_agile 

     }); 
    }; 

var on_get_metadata = function(data, text_status, XMLHttpRequest) { 
     console.log(data); 
} 

任我proxy.jsp文件是: -

<%@ page language="java" import="org.w3c.dom.*,javax.xml.parsers.DocumentBuilder,javax.xml.parsers.DocumentBuilderFactory,java.net.*,java.io.*" contentType="text/html; charset=ISO-8859-1" 
    pageEncoding="ISO-8859-1"%> 
<% 
final String login ="user"; 
final String password ="pass"; 

Authenticator.setDefault(new Authenticator() { 
    protected PasswordAuthentication getPasswordAuthentication() { 
     return new PasswordAuthentication (login, password.toCharArray()); 
    } 
}); 

String a_Url = request.getParameter("url") ; 
String l_Content = "" ; 

if(a_Url!=null && a_Url.length()>0) 
l_Content = GetContent(a_Url).toString() ; 
out.println(l_Content); 
%> 
<%! 
StringBuffer GetContent(String a_Url) throws Exception 
{ 
URL l_URL = new URL(a_Url); 
BufferedReader l_Reader = new BufferedReader(new InputStreamReader(l_URL.openStream())); 

StringBuffer l_Result = new StringBuffer("") ; 
String l_InputLine = null ; 
while ((l_InputLine = l_Reader.readLine()) != null) 
//System.out.println("Print3" +l_InputLine); 
l_Result.append(l_InputLine); 

l_Reader.close(); 
return(l_Result) ; 
} 
%> 

,當我得到的迴應從這個proxy.jsp文件後,我得到這個錯誤: -

<!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="HTTP://search.xyz.com/rest-services/se/agile/get?id=CD90">here</a>.</p></body></html> 

如果我在上面的jQuery AJAX代碼中檢查狀態代碼,那麼它是200.所以這意味着proxy.jsp頁面中發生了一些事情。爲什麼它無法獲取url的內容。任何建議將不勝感激...

回答

1

的302狀態碼錶示該文件你想拉信息,從已移動。 302是一個臨時重定向,你可以在這裏看到定義:HTTP status code definitions

你的ajax調用很好,但是你的JSP代碼並不遵循302重定向。我不知道這是否會解決這個問題,但它是值得探討使用你的JSP apache的HttpClient代碼。

希望這會有所幫助。什麼,我已經與HttpClient的

httpclient.getParams().setParameter(AuthPNames.PROXY_AUTH_PREF, AuthPolicy.BASIC);  
Credentials creds = new UsernamePasswordCredentials(proxyUsername, proxyPassword); 

CredentialsProvider credsProvider = new BasicCredentialsProvider(); 
credsProvider.setCredentials(AuthScope.ANY, creds); 
httpclient.getCredentialsProvider().setCredentials(AuthScope.ANY, credsProvider.getCredentials(AuthScope.ANY)); 
+0

@kasdega做

的代碼片段,感謝回答回來..我不知道在基本驗證哪些呢,這些管路機構的HttpClient:'client.getState() .setCredentials(新AuthScope( 「www.verisign.com」,443, 「境界」), 新UsernamePasswordCredentials( 「用戶名」, 「密碼」) );'喜歡什麼,我應該在的地方寫www.verisign.com而我寫的東西代替443,什麼是境界,你能不能幫我在這個.. – ferhan

+0

HttpClient的API是非常有據可查的。我鼓勵您閱讀這些文檔。我不確定你想要用新的AuthScope來做什麼。在你的情況下,你可能會逃避使用靜態AuthScope.ANY。 – kasdega

+0

@kasdega,謝謝你回覆。但仍然得到相同的錯誤。任何其他建議。 – ferhan