2014-03-03 42 views
4

使用curl时,我看到服务器上的行为有所不同,具体取决于我是否通过--compressed作为参数。有没有办法通过 - 压缩到PHP的curl_setopt()?

我已经设置Accept-Encoding头为gzip,放气,SDCH:

curl_setopt($ch, CURLOPT_ENCODING, 'gzip,deflate,sdch'); 

我也尝试设置编码,空字符串:“”因为,理应指任何类型的压缩支持的。

但是,如果我通过命令行传递了--compressed,则返回的内容类型为:gzip。如果我没有通过--compressed,我得到的内容类型是text/html;charset=UTF-8

使用PHP的curl_exec(),我似乎无法让它返回内容类型:gzip。

=====

让我澄清我想要完成的事情。当我运行以下命令:curl -I http://someserver.com --compressed让我的内容类型:gzip

运行相同的命令curl -I http://someserver.com没有--compressed让我 内容类型:text/html;charset=UTF-8

试图做到这一点在PHP中:

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, "http://someserver.com"); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 

// I've tried excluding this line, setting it to gzip, and empty string 
curl_setopt($ch, CURLOPT_ENCODING, ''); 
curl_setopt($ch, CURLOPT_HEADER, 1); 

curl_exec($ch)); 
$content_type = curl_getinfo($ch, CURLINFO_CONTENT_TYPE); 

无论我尝试什么,我都会收到$ content-type = text/html;charset=UTF-8而不是gzip

+0

“Content-Type”标头绝对没问题。它在我看来通过你实际上对'Content-Encoding'头部感兴趣(对于'Content-Encoding:gzip')。 – salathe

回答

0

卸下CURLOPT_ENCODING选项(所以卷曲不会自动解码),并把accept-encoding选项报头手工应该做的伎俩:

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 
    'Accept-Encoding: gzip, deflate', 
    'Connection: Close' 
)); 
+0

我试过空字符串作为编码(正如我原来的帖子中提到的),但curl_getinfo仍然显示为'text/html; charset = UTF-8'作为内容类型。 –

+1

Curl自动解压缩响应。 –

+0

是的,我已经在冲刷他们的文档后发现了这部分内容,但是通过忽略CURLOPT_ENCODING,您还告诉服务器不要压缩响应。 我发现这个,并能够看到压缩的响应,但这不是我的目标:http://trog.qgl.org/20110729/differences-in-requesting-gziped-content-using-curl-in- php –

1

并非所有服务在世界各地提供压缩的内容作为响应。通过选项CURLOPT_ENCODING,您只能从服务器请求压缩内容。但是如果服务器没有实现这个机制,服务器会返回你的纯html。您可以尝试与提供压缩内容的其他随机网站。例如youtube.com(可能)。

+0

我实际上是在相同的服务器上测试这个,而不仅仅是任何服务器。我很抱歉,如果我的随机服务器。com引起了任何混淆。 –

+0

我明白...但仍然尝试相同的代码为任何其他网站,并检查他们是否返回所需的输出或没有...如果是的话,它的问题与您的服务器,而不是卷曲... –

相关问题