2013-06-13 3 views
0

그래서 아래 코드로 고민하고 있습니다. 내가 파일을 잡고 파일을 잡고 그것을 저장하려고 PHP를 제공하는 자바 있습니다. 서블릿에서 파일을 브라우저에서 제대로 다운로드 할 수 있습니다. PHP 코드로 모든 파일 또는 웹 페이지 (SSL 또는 not)를 다운로드 할 수 있습니다. 하지만 나를 위해 PHP는이 서블릿에서 다운로드 할 수 없어! PHP에 익숙한 임 (Im)하지만 자바가별로 도움이된다면 서블릿을 쓰지 않았다. 그러나 코드의 양쪽 끝을 편집 할 수 있습니다. 고맙습니다!!PHP를 사용하여 자바 서블릿에서 파일을 다운로드 할 수 없습니다

JAVA :

@Override 
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    try { 
     String fileName = "/tmp/DongleUpdate.jar"; 
     File f = new File("/tmp/DongleUpdate.jar"); 
     response.setContentType("application/zip"); 
     response.setHeader("Content-Disposition", "attachment;filename=\"" + 
       fileName + "\""); 
     byte[] arBytes = new byte[(int) f.length()]; 
     FileInputStream is = new FileInputStream(f); 
     is.read(arBytes); 
     ServletOutputStream op = response.getOutputStream(); 
     op.write(arBytes); 
     op.flush(); 

    } catch(IOException ioe) { 
     ioe.printStackTrace(); 
    } 
} 

PHP :

$ch = curl_init($file); 
curl_setopt($ch, CONNECTTIMEOUT, 10); 
curl_setopt($ch, TIMEOUT, 60); 
curl_setopt($ch, CURLOPT_HEADER, 0); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_BINARYTRANSFER,1); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0); 
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); 
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); 
curl_setopt($curl, CURLOPT_FRESH_CONNECT, true); 
curl_setopt($curl, CURLOPT_GET, true); 
curl_setopt($curl, CURLOPT_SSLVERSION, 3); 
curl_setopt($cURL,CURLOPT_HTTPHEADER,array(
    "Accept: application/zip" 
)); 
$rawdata=curl_exec($ch); 
curl_close ($ch); 

$fp = fopen($saveloc,'w'); 
fwrite($fp, $rawdata); 
fclose($fp); 

내가 여기 생각할 수있는 컬 옵션의 모든 버전을 시도했습니다. 나는 오버플로를 새로 쌓기에 익숙하지만 도움이된다면 누군가에게 실제 링크를 사용하여 메시지를 보낼 수 있습니다. 그것은 여기에 도움이된다면 또한 피들러에서 링크에 대한 원시 연결 출력입니다 :

CONNECT XXXX:8443 HTTP/1.1 
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:21.0) Gecko/20100101 Firefox/21.0 
Connection: keep-alive 
Connection: keep-alive 
Host: XXXX 

A SSLv3-compatible ClientHello handshake was found. Fiddler extracted the parameters below. 

Version: 3.1 (TLS/1.0) 
Random: XXXX 
SessionID: empty 
Extensions: 
elliptic_curves XXXX 
ec_point_formats 01 00 
SessionTicket TLS empty 
NextProtocolNegotiation empty 
Ciphers: 
[00FF] TLS_EMPTY_RENEGOTIATION_INFO_SCSV 
[C00A] TLS1_CK_ECDHE_ECDSA_WITH_AES_256_CBC_SHA 
[C014] TLS1_CK_ECDHE_RSA_WITH_AES_256_CBC_SHA 
[0088] TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA 
[0087] TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA 
[0039] TLS_DHE_RSA_WITH_AES_256_SHA 
[0038] TLS_DHE_DSS_WITH_AES_256_SHA 
[C00F] TLS_ECDH_RSA_WITH_AES_256_CBC_SHA 
[C005] TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA 
[0084] TLS_RSA_WITH_CAMELLIA_256_CBC_SHA 
[0035] TLS_RSA_AES_256_SHA 
[C007] TLS_ECDHE_ECDSA_WITH_RC4_128_SHA 
[C009] TLS1_CK_ECDHE_ECDSA_WITH_AES_128_CBC_SHA 
[C011] TLS_ECDHE_RSA_WITH_RC4_128_SHA 
[C013] TLS1_CK_ECDHE_RSA_WITH_AES_128_CBC_SHA 
[0045] TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA 
[0044] TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA 
[0033] TLS_DHE_RSA_WITH_AES_128_SHA 
[0032] TLS_DHE_DSS_WITH_AES_128_SHA 
[C00C] TLS_ECDH_RSA_WITH_RC4_128_SHA 
[C00E] TLS_ECDH_RSA_WITH_AES_128_CBC_SHA 
[C002] TLS_ECDH_ECDSA_WITH_RC4_128_SHA 
[C004] TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA 
[0096] TLS_RSA_WITH_SEED_CBC_SHA 
[0041] TLS_RSA_WITH_CAMELLIA_128_CBC_SHA 
[0005] SSL_RSA_WITH_RC4_128_SHA 
[0004] SSL_RSA_WITH_RC4_128_MD5 
[002F] TLS_RSA_AES_128_SHA 
[C008] TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA 
[C012] TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA 
[0016] SSL_DHE_RSA_WITH_3DES_EDE_SHA 
[0013] SSL_DHE_DSS_WITH_3DES_EDE_SHA 
[C00D] TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA 
[C003] TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA 
[FEFF] SSL_RSA_FIPS_WITH_3DES_EDE_SHA 
[000A] SSL_RSA_WITH_3DES_EDE_SHA 

압축 : [00] NO_COMPRESSION

+0

를? – 75inchpianist

답변

-1

자바 측이 Content-length 헤더를 설정하면 아마도 당신은 더 좋은 행운이있을 것이다.

브라우저는 일반적으로 브라우저 없이도 수행 할 수 있지만 여기에 ...?

+0

시도한 SSL 및 비 SSL. 또한 행운을 남긴 콘텐츠 길이 추가 :/ – user2483894

+0

나는 펑키 한 일을하거나 호스팅 회사에서 아웃 바운드 포트 8443을 열어야합니까? 방금 체크하고 아웃 바운드 8443이 차단되었습니다 .... – user2483894

+0

콘텐츠 길이가 설정되어 있지 않으면 서블릿의 기본값은 청크 분할 인코딩입니다. 이는 모든 적절한 HTTP 클라이언트에서 지원됩니다. 그런데 인코딩이 청크되지 않은 경우 대부분의 브라우저는이를 먹지 않습니다. – BalusC

0

이전 게시물 그러나 사람이 메신저를 그냥 바보 관심 내 컬 옵션은 두 개의 서로 다른 분류 변수가 있도록 잘라 내기 및 붙여 넣기 실수를 한 경우 : 당신이 HTTPS를 시도/

관련 문제