2016-10-08 9 views
0

Tomcat 8(ポート9001に設定されています)とサーブレットウィットコンテキストパス/があり、プロジェクト名は "ROOT"なので、リクエストごとに: ...サーブレットが受信しなければなりません。javaサーブレットプロキシはいくつかのpdfファイルをダウンロードしません

クライアント(エンドユーザー)はブラウザのプロキシをhttp://myserver:9001と設定していますので、私のサーブレットはクライアントからリクエストを受け取り、別のプロキシを使用して新しいリクエストを送信し、レスポンスを返してからクライアントにレスポンスを送信します。

protected void processRequest(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException { 
    System.out.println("##### header(host) ##### " + request.getHeader("host")); 
    System.out.println("##### getRemoteAddr ##### " + request.getRemoteAddr()); 
    System.out.println("##### request.getScheme() ##### " + request.getScheme()); 
    String proxyAdress = "Proxy.haccettepe.edu.tr"; 
    String proxyPort = "8080"; 
    System.setProperty("http.proxyHost", proxyAdress); 
    System.setProperty("http.proxyPort", proxyPort); 

    Authenticator authenticator = new Authenticator() { 
     public PasswordAuthentication getPasswordAuthentication() { 
      System.out.println("$$$$$$$$$$$$$$$$$$$$$$$"); 
      return (new PasswordAuthentication("yildirims", 
        "9891".toCharArray())); 
     } 
    }; 
    System.out.println("%%%%%%%%%%%%%%%%%%%%%%%%% " + authenticator.toString()); 
    Authenticator.setDefault(authenticator); 
    Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("Proxy.haccettepe.edu.tr", 8080)); 

    ///////---->HttpURLConnection with proxy 
    URL url = new URL((request.getScheme() + "://" + request.getHeader("host") + request.getRequestURI() + "?" + request.getQueryString()).replace("?null", "")); 
    System.out.println("URL ============= " + url); 

    HttpURLConnection conn = (HttpURLConnection) url.openConnection(proxy); 
    conn.setRequestMethod(request.getMethod()); 
    System.out.println(">>>>>>>>>>>>>>>>>>>" + conn.usingProxy()); 
    conn.connect(); 
    InputStream is2 = conn.getInputStream(); 
    System.out.println("content type=>>>>>>>"+ conn.getContentType()); 
    System.out.println("content getContentEncoding=>>>>>>>"+ conn.getContentEncoding()); 
    System.out.println("content getHeaderFieldKey=>>>>>>>"+ conn.getHeaderFieldKey(0)); 
    System.out.println("content getRequestMethod=>>>>>>>"+ conn.getRequestMethod()); 
    HttpServletResponse rs=new HttpServletResponseWrapper(response); 

    OutputStream oos = response.getOutputStream(); 
     response.setHeader("Content-type", conn.getContentType()); 
     response.setContentType(conn.getContentType()); 
    byte[] buf = new byte[102400]; 
    int c = 0; 
    while ((c = is2.read(buf, 0, buf.length)) > 0) {  
     oos.write(buf, 0, c); 
     if (url.toString().endsWith(".pdf")) { 
      oos.flush(); 
     } 
    } 
    if (url.toString().endsWith(".pdf")) { 
     oos.close(); 
     is2.close(); 
     } 
    } 

いくつかの簡単なページのように、このコードの仕事といくつかの簡単な.PDFをダウンロードしますが、このようないくつかの.pdfファイルでは動作しません:

http://link.springer.com/content/pdf/10.1007%2Fs00128-015-1658-6.pdf

多くのhttpのWebのための作品を以下のコードページ、

答えて

0

いくつかのURLがある/その設定Tomcatに

いくつかの要求がポストであり、いくつかのcokiesはトンをダウンロードする必要があり、それらを拒否していません裾。

関連する問題