2010-02-04 2 views
1

동적 .csv 파일의 내용을 구문 분석하려고합니다. 그러나, (분명 푸딩 파일 이름 등 포함)이 코드 :Content-disposition : attachment를 사용하여 파일 내용보기

$socket = fsockopen("www.example.com", 443); 
fwrite($socket, "GET /dynamicCsv.csv?param=value HTTP/1.1\r\n"); 
fwrite($socket, "Host: www.example.com\r\n"); 
fwrite($socket, "Connection: close\r\n"); 
fwrite($socket, "\r\n"); 

while(!feof($socket)) echo fgets($socket); 

는 ... 그냥 파일을 다운로드합니다. 명령 줄에서 OpenSSL을 사용

나는 똑같은 요청을 입력하고 얻을 수있는 것은 다음과 같은 응답 헤더는 다시 전송 :

HTTP/1.1 200 OK 
Server: Apache-Coyote/1.1 
Content-disposition: attachment; filename=dynamicCsv.csv 
Pragma: public 
Cache-Control: max-age=0 
Set-Cookie: SESSIONID=ASDFUHN023UIN0F; Path=/; Secure 
Content-Type: text/csv;charset=UTF-8 
Transfer-Encoding: chunked 
Date: Thu, 04 Feb 2010 16:53:00 GMT 

자동으로 내가 substr를 사용하여 첫 번째 문자를 잘라하는 것을 시도했다 파일 다운로드를 피하기 위해 브라우저가 현재 문서의 헤더 세트로 fgets의 응답 결과를 보았 으면 좋겠다. 그것은 작동하지 않았다. 동일한 아이디어를 추구하면서 소켓을 열기 전에 많은 줄 바꿈을 삽입하려고 시도했으나 작동하지도 않았다.

내 두 가지 질문은 다음과 같습니다

  1. 왜 지구에 브라우저가 파일을 다운로드해야한다고 생각합니까?
  2. 어떻게 중지시킬 수 있습니까?

크롬은 지금까지만 사용해 왔지만 차이가 나는 이유는 알 수 없습니다. 당신은 cURL 또는 그것을위한 someother wrapper 사용을 고려할 수

많은 감사, 안드레아스

+0

스크립트를 실행하면 다운로드 파일 대화 상자가 중단되어 아무 것도 출력하지 않습니다. 그 맞습니까? –

+0

사실, 저는 여기서 크롬에서 다소 흥미로운 작품을 발견했다고 생각합니다. 그것이하는 것은 출력하고 싶은 파일 만 다운로드한다는 것입니다. 소켓을 열고 요청하기 전에 아무것도 출력하지 않으면 예상대로 화면에 표시됩니다. 그러나 Firefox에서는 ssl을 지정하지 않고 ascii 이외의 문자를 몇 개만 출력합니다. 포트 80에서 nc'ing하면 동일한 결과가 나타납니다. Chrome은 소켓 응답을 별도로 구문 분석하여 두 프로토콜 (http 및 https). 좀 더 철저한 조사가 필요할만한 가치가 있습니다. –

답변

1

좋아요, 실제로 직접 해결할 수있었습니다. 참고로, 질문을 제거하는 대신 수정본과 함께이 응답을 추가합니다.

문제는

fsockopen("www.example.com", 443); 

에서 나는 SSL 프로토콜을 사용하도록 지정하지 않은 것이 었습니다. 따라서 수정하려면 다음을 입력하십시오.

fsockopen("ssl://www.example.com", 443); 
관련 문제