php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Request #28051 gzip accept-encoding for HTTP request
Submitted: 2004-04-19 03:12 UTC Modified: 2005-02-05 11:50 UTC
Votes:7
Avg. Score:4.4 ± 0.7
Reproduced:6 of 6 (100.0%)
Same Version:2 (33.3%)
Same OS:1 (16.7%)
From: Olaf at XCC dot TMFWeb dot NL Assigned: pollita (profile)
Status: Suspended Package: Feature/Change Request
PHP Version: 5 OS: *
Private report: No CVE-ID: None
Welcome back! If you're the original bug submitter, here's where you can edit the bug or add additional notes.
If you forgot your password, you can retrieve your password here.
Password:
Status:
Package:
Bug Type:
Summary:
From: Olaf at XCC dot TMFWeb dot NL
New email:
PHP Version: OS:

 

 [2004-04-19 03:12 UTC] Olaf at XCC dot TMFWeb dot NL
Description:
------------
This code sends a HTTP request without gzip accept-encoding header, so the server can't send a gzip content encoded response.

Reproduce code:
---------------
<?php
	echo strlen(file_get_contents("http://php.net/"));
?>


Expected result:
----------------
GET /s HTTP/1.0
Content-Encoding: gzip
Host: php.net

HTTP/1.0 200 OK
Content-Type: text/plain



Actual result:
--------------
GET /s HTTP/1.0
Host: php.net

HTTP/1.0 200 OK
Content-Type: text/plain



Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2004-04-19 06:35 UTC] pollita@php.net
This may be added in PHP 5.1.

In the mean time you may be able to acheive this behavior using a combination of the header context parameter for the http:// wrapper and the zlib_filter found in PECL.  This stop-gap solution will only work in PHP5 however.
 [2005-02-05 08:50 UTC] none at none dot org
I get the desired result like this:
(lest I didn't get the point...)

<?php

  //  my server sends gzipped data if client allows
  $url = "www.byteshift.de";

  function gzdecode($string){
    $string = substr($string, 10);
    return gzinflate($string);
  }

  function get_gzipped_data($url){
    $http_response = '';
    $fp = fsockopen($url, 80);
    fputs($fp, "GET / HTTP/1.1\r\n");
    fputs($fp, "Accept-Encoding: gzip\r\n");
  
    fputs($fp, "Host: $url\r\n\r\n");
    while (!feof($fp))
      $http_response .= fgets($fp, 128);
    fclose($fp);
    return $http_response;
  }

  preg_match("/^(.+)\r?\n\r?\n\w+\r?\n(.+)$/s",
             get_gzipped_data($url),
             $matches);
  $header = $matches[1];
  $body   = $matches[2];
  $html   = gzdecode($body);
	$strlen_uncomp = strlen(file_get_contents("http://$url/"));
	$strlen_decomp = strlen($body);

  echo "
  strlen_uncomp: $strlen_uncomp Kb
  strlen_decomp: $strlen_decomp Kb
  =============================
  $html
  ";
?>

Marek Moehling
byteshift.de
i4n3fo@byte45shift.de
(del numbers to despam)
 [2005-02-05 11:50 UTC] Olaf at XCC dot TMFWeb dot NL
> (lest I didn't get the point...)

The point is gzip suppport in file_get_contents().
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Sat Dec 21 17:01:58 2024 UTC