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のための作品を以下のコードページ、