1

这段代码:

$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);

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

4

1 回答 1

1

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

该修复是提交 bc6037e 进入 curl 7.30.0

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

知道它是如何工作的,您可以手动添加/减去标题的长度特定数量,看看它缺少多少。

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

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

于 2016-01-12T12:57:25.143 回答