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

その修正はcurl 7.30.0に入ったcommit bc6037eでした

どう見てもバグです。このバグ以降の修正は信頼できなくなります。

それがどのように機能するかを知っていれば、ヘッダーの長さを特定の量だけ手動で加算/減算するだけで、不足している量を確認できます。

または、プロキシが HTML のみに使用されている場合は、ヘッダーが終了する HTML タグで始まる行が得られるまで、文字列を手動で解析できます。

申し訳ありませんが、このバグをソースで修正する以外に信頼できる解決策はありません。可能であれば、curl、libcurl、または何でも更新できます。または、そのバージョンを git からプルして、このバグを修正し、再コンパイルすることもできます。

于 2016-01-12T12:57:25.143 に答える