Ajax通信。でもProxy認証が・・・
XMLHttpRequestを利用したAjax通信では、同一ドメイン以外へのHTTPリクエストの発行が許可されていない。例えば自ドメインがlocalhostなのに、http://www.google.co.jpにアクセスするなんてことは一足飛びにはできないわけです。
というわけで通常はクライアント(javascript)からはサーバーにリクエストを投げてそこからGoogleに行く、というようなことをしないといけません(JSONPという方法はここではおいておいて・・)。
やってみましょう。画面に表示される「Googleロード」というボタンを押すとAjaxによってページの再描画なしにGoogleのトップページが表示されるというものです。実装はJSP&Servletでいきます。
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="Windows-31J" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <HTML> <HEAD> <TITLE>Ajaxサンプル</TITLE> <META http-equiv="Expires" content="0"> <META http-equiv="Pragma" content="no-cache"> <META http-equiv="Cache-Control" content="no-cache"> <script type="text/javascript" src="jquery-1.2.6.min.js"></script> <script type="text/javascript"> $(function(){ $('button').click(function(){ $('#result').load("http://localhost:5555/SampleAjax/getgoogle"); }); }); </script> </HEAD> <BODY> <BUTTON>Googleロード</BUTTON> <P id="result"></P> </BODY> </HTML>
次にサーバーサイドのプログラムです。commonsのHTTP Clientを利用しています。
public class GetGoogleServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { HttpClient client = new HttpClient(); HttpMethod method = new GetMethod("http://www.google.co.jp"); String responseMessage = null; try { client.executeMethod(method); responseMessage = method.getResponseBodyAsString(); } finally { method.releaseConnection(); } res.setContentType("text/html; charset=UTF-8"); PrintWriter writer = res.getWriter(); writer.println(responseMessage); writer.close(); } }
実行してみるとサーバーサイドで接続エラーが出ており、Googleへアクセスできていないようです。
理由は、うちの会社ではProxy認証が必要なのですがそれをしていないことです。しくしく。
というわけでサーバーサイドのプログラムを少し修正し、プロキシ認証を行います。
・・・略・・・ HttpClient client = new HttpClient(); client.getHostConfiguration().setProxy("proxy.some.company", 8080); // 追加! client.getState().setProxyCredentials(AuthScope.ANY, new UsernamePasswordCredentials("username", "password")); // 追加! HttpMethod method = new GetMethod("http://www.google.co.jp"); ・・・略・・・
これで、うまくいきました!ヤッホゥー!!