使用代理时,php-curl标头大小不正确

时间:2016-01-12 12:20:47

标签: php curl proxy php-curl

此代码:

$headersSize     = curl_getinfo($curl, CURLINFO_HEADER_SIZE);
$responseHeaders = substr($response, 0, $headersSize);
$responseBody    = substr($response, $headersSize);

返回不正确的标题大小(strlen),例如这里:

...
Pragma: no-cache
Set-Cookie: foo=bar; pat

 ---- curl want split here ---- 

h=/
Access-Control-Allow-Origin: *

<!DOCTYPE html ...

响应可以有多个标题(重定向,继续等)。而且这样的事情不起作用:

list($header, $body) = explode("\r\n\r\n", $response, 2);

如何更正确定标题的大小?

1 个答案:

答案 0 :(得分:1)

可能与此相关:https://bugs.php.net/bug.php?id=63894&edit=1http://sourceforge.net/p/curl/bugs/1204

  

该修复是提交bc6037e进入curl 7.30.0

无论如何,这是一个错误。在此错误之后的任何修复都将是不可靠的。

知道它是如何工作的,您只需手动添加/减去标题的长度特定数量,只需看看它丢失了多少。

或者,如果代理仅用于HTML,那么您可以手动解析字符串,直到获得以HTML标记开头的行,这是标题结束的位置。

很抱歉,除了在源头修复此错误之外,我没有看到可靠的解决方案。如果可以,您可以更新curl,libcurl或其他任何内容。或者您可以从git中提取该版本,修复此错误,重新编译,如果您的版本合理。