2011-10-12 1 views
1

curl을 사용하여 웹 페이지를 가져 오는 중, 응답이 gzip인지 아닌지를 감지해야합니다.PHP - gzip 서버 응답 감지

응답 헤더에 Content-Encoding이 지정되어 있으면 제대로 작동하지만 일부 서버는 "전송 인코딩"을 반환합니다 ("청크"및 Content-Encoding 헤더 없음).

gzip을 감지하거나 원시 (인코딩 된) 서버 응답을 얻는 방법이 있습니까?

curl_getinfo를 보았지만 content_encoding도 지정되지 않았습니다.

감사합니다.

답변

2

응답이 gzip 매직 넘버로 시작하는지, 특히 1f 8b인지 확인할 수 있습니다.

1

GZIP을 감지 할 수있는 방법이 있나요

예. cURL 헤더 기능을 사용할 수 있습니다. 예를 들어 헤더 응답을 처리하는 함수를 정의 할 수 있습니다. CURLOPT_HEADERFUNCTION 옵션과 함께 curl_setopt()을 사용하십시오. 또는 CURLOPT_WRITEHEADER 옵션이있는 파일 (예 : fopen())에 작성하십시오.

사용할 수있는 옵션이 더있을 수 있습니다. 가능성은 curl_setopt() 설명서를 참조하십시오. 찾으려는 헤더의 이름은 이고 내용 인코딩은입니다.

출력이 파일 인 경우 PHP finfopredefined constants의 일부를 사용할 수도 있습니다. 또는 finfo를 사용할 수없는 경우 mime_content_type() (DEPRECATED!)

[...] 또는 원시 (인코딩 된) 서버 응답을 받습니까?

예. accept-encoding 헤더를 지정할 수 있습니다. 찾으려는 값은 신분입니다. 그래서 당신은 보낼 수 있습니다

Accept-Encoding: identity 

는 (직접 파일로 작성하는 예를 들어) 인코딩되지 않은/비 압축 출력을 얻을 수 HTTP/1.1 RFC 에 모습을 가질 수 있습니다. 이 목적으로 CURLOPT_ENCODING을 사용하십시오. * curl_setopt *로도 설정할 수 있습니다. 그냥 (디코딩을 원한다면,

CURLOPT_HEADER => true 

을하지만 :

1

별도 HEAD 요청을 발행 할 수 있습니다 :

CURLOPT_HEADER => true 
CURLOPT_NOBODY => true 

또는 헤더를 요청 원래의 요청에 접두사 수) HTML을 사용하면 다음을 사용할 수 있습니다.

CURLOPT_ENCODING => '' 

그리고 CURL은 자동으로 서버와 협상하고 그것을 당신을 위해 e.