2011-06-29 13 views
0

jspにプロキシコードを書き込んで、自分のコンピュータからローカルに他のドメインにajaxを呼び出そうとしています。これが私のjQuery AJAXコードで、proxy.jspページを呼び出しています。302 jspを使用してURLの内容を取得しようとすると見つかりました。

<%@ 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ファイルからの応答を取得すると、私はこのエラーを取得する: - - :

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ファイルがある

<!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、 "realm")、 新しいUsernamePasswordCredentials( "username"、 "password") ); 'www.verisign.comの代わりに書くべきもの私が443の代わりに書いたものは何であり、何が本当ですか、これで私を助けることができますか? – ferhan

+0

HttpClient Apiは非常によく文書化されています。これらのドキュメントを読むことをお勧めします。新しいAuthScopeで何をしようとしているのかよく分かりません。あなたの場合、おそらく静的なAuthScope.ANYを使用することで逃げることができます。 – kasdega

+0

@kasdega、返信いただきありがとうございます。しかし、まだ同じエラーが発生しています。その他の提案。 – ferhan

関連する問題