此代码:
$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);
如何更正确定标题的大小?
答案 0 :(得分: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中提取该版本,修复此错误,重新编译,如果您的版本合理。