我在一臺裝有php7.4的ubuntu機器上安裝了curl 7.58和guzzle 7.3(源代碼:7008573)。
當我運行一個帶有
的請求時$curl = curl_init()。
curl_setopt_array($curl, array(
CURLOPT_URL => 'http://mockbin.org/bin/e61ded3e-d2e1-4071-8c27-9c35f1d7cb72?foo=bar&foo=baz'/span>,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => ''/span>,
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1。
CURLOPT_CUSTOMREQUEST => 'GET'/span>,
CURLOPT_HEADER => true,
));
$response = curl_exec($curl)。
//然后,在你的curl_exec呼叫之后:.
$header_size = curl_getinfo($curl, CURLINFO_HEADER_SIZE)。
$header = substr($response, 0, $header_size)。
$body = substr($response, $header_size)。
curl_close($curl)。
echo $header;
我可以看到整個延續令牌就在那里。而當我用guzzle運行這個時,你可以看到我得到的結果:
我可以看到整個延續標記在那里。
>>> $client = new GuzzleHttpClient();
=> GuzzleHttpClient {#4501}。
>>> $res = $client->head('http://mockbin.org/bin/e61ded3e-d2e1-4071-8c27-9c35f1d7cb72?foo=bar&foo=baz') 。
=> GuzzleHttpPsr7Response {#4524}。
>>> $res->getHeaders()。
=>[
"Date" => [
"Tue, 14 Sep 2021 14:52:30 GMT"/span>,
],
"Content-Type" =>[
"text/html; charset=utf-8",
],
"Connection" =>[
"keep-alive",
],
"continuation" => [
"eyJUb3RhbENvdW50IjpudWxsLCJUb2tlbiI6Ilt7XCJ0b2tlblwiOlwiK1JJRDp enpaakFMZlpzOXBYNHdFQUFBQUFBQT09I1JUOjEjVFJDOjEwMCNJU1Y6MiNJRU86NjU1NTEjUUNGOjQjRlBQOkFnSUhBTklCQndBYUFGVWpnR0FoWUFBQ0YwZ01BSUVPUkFJS2lnS0FjZ0lBUWdFQUNBQVFBUEVPQUF1UkVRREFVUXBpQVpxRjhZUUpBQmdBQm9IN2phcURQNGRKaFNTQTZvRFdnTldJVllXS2hkK0lDZ0FNQURhbXVZUDVqVUNCT1lVYWdBc0FFZ0RaaXpDQTlJQkFnbW1CRFlGYmdneU5iWThNQUJBQU9wQmNoT1NCVUlNRGcwMkFBSUFPZ0EwQUlnRDBoQ3FBNzRjR2dCSUFBSmdBQWt1QUlvSWdnemVGbVlSUkJRQUo0SWRVaFlXQ0R3QUVBTUdLdTZVUUFBSUFpNFVTQUFRQTVvQkVoeE1BQWdEQ2hoUUFCQUNNakVPRkZRQUdBRk9zaUl1NmdoWUFBZ0RjaWhjQUJnREpoQ0dYMVpvWkFBSUFFWklhQUF3QXphQ2tpWWlQUVlBM2dNaUFHd0FPQUZLRUFJQ0JDZ1VBeElDcm1mT0dIQUFDQUl1SkhRQUtBSjJMS29UN2dIK2pBb0FlQUFZQXJac0ZnRWlJSHdBQ0FBMnNJQUFDQUJTa0lRQVdBRWFMNGFJaGdTR0Jlb05aZ2lhQkpvRlRnaUtCZm9NaUFCd0FHNEZVZ3FtQ3NvWWhnYVNFZm9NcmdZYURKWUgvalplS2c0UGZnaU1BQWdEeWdpUUFBZ0RDaUNVQUJBRFJtRG1NSmdBRUFJMmgzbzBuQUFnQVlRZGdBSkNNLzVjb0FBb0FJSWg3aVlxT0I0QlRtU2tBQ0FEZWdpU21Lb0JEalNvQURnRHRrYWlDN1lmSmhmbUF0bzZmaGlzQUFnQXNwU3dBQmdDWmljU1d4Wk10QUFnQVd
JFQXlBUkFBSUdBQUFBQ0w0QVRBSUdBQUlFUUFCYUNHWUFJd0FNUUNJQVFBSUVnQkFvQWdBZ0FFQkcwQVpRSUFrQUNnQUVBUDRBTGdBR0FQNEFCd0VFQVI0b2hnaGtBQUFwUWt5Z0FnS0tJU0FnZzZnZ0RBUVlBOFFCT0FNZVpVSUFEd0VBeExCQUtBSUlHSUNweUFaeURjSVJLZ0FPQUd3QUFPQUVEQUFzSzhRQVEwR2pFeEFpTW9pN3F6Z01BTXdFSUFZZ0VCZ0N6QndGRkVRS2dRQlFBQUcvR29BQUVCZ0F3Z3ZJQWhnREZCWklBQVpLQVNBQkpnQUNaQUFBREVNTUZBQ0FRQUlNR0FoZ0FvQUNBQUpLRDFRVUFoc0FJTUFFWkFEQXdFZ0JBQVFJWXFBY0lZQVFCZ0VnUlJFQVlBQkFBQ2dnQTU0bW1BQUNCRUFRQUVJQUFBQ0FFQURPS0FzQ0lBQWdBVFlBRXdJQUNBQ1FNQURBQUlnQmdBQVlBUVFBQWhDRUFDUUFVaVJ5QUJNQWdnSmdnQW9nQ0FQTUFlQUJ5QWdpUlFDRG5peHFBRG9BRHdFQUNnQUFBSUMrQUE4QmlBZ0FBQ0JIRGhZeUJBY0NRa1NhQUFZQmhnT3lBWFlBc2dGbUFmSVVDd0FrQkZDQWJnQUhBUkFBdWdBSEFnQkROaVVhQ1hZQWVnU0tBWDRBQmdPTURBZ2FJUkVRVUVJQVBndm9GQU1vWkxBRUJEQUFHQVFBRmhvQ0FCWUtGQXdEMEFDUUFYNEVsQVFEQWpGQUFKREt3QkFDa0JoQU5CUUFBWUFFQUlnQUFZR1lFSG9BQndNd0FCd0ZNQU1FYklBUVRBS0daTVFBQUFaTUVBZ1FCQUFBTUVnQU1BQVFBSm9EQ0J0VGtrSUlqZ0FQQUFRZ0FDQUNBOWdnM0JNQ0FBTUZJQXdCZ1FBRVlDQUJnUUdMa0FBQUdBQ2FSaHMwUkFBWUlBVlFBcFlFWWdCTUFEQUFBR0FBR053QWtCQU14RU
],
"IsXCJtYXhcIjpcIkZGXCJ9fV0ifQ==" => [
"",
],
" vary" =>[
"Accept-Encoding",
],
"via" =>[
"1.1 vegur",
],
"CF-Cache-Status" =>[
"DYNAMIC",
],
"Report-To" =>[
"{"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v3? s=afJelUgPFRe7kA2sBEYLOB9b6vRv1qOqHbuGOeCsKdYsWCo%2BR5%2FH1irm9F47G9Uq5EeZ0ONypPsCRFfMm%2B7Nl5dgQ3zuafnjblABdJv7d96EWwUetWMN4483%2FanpPQ%3D%"}】。] "group": "cf-nel", "max_age": 604800}",
],
"NEL" => [
"{"success_fraction":0,"report_to": "cf-nel", "max_age": 604800}",
],
"服務器" => [
"cloudflare"。
],
"CF-RAY" => [
"68ea7081aba00c01-AMS",
],
"alt-svc" =>[
"h3=":443"; ma=86400, h3-29=": 443"; ma=86400, h3-28=": 443"; ma=86400, h3-27=": 443"; ma=86400",
],
正如你所看到的,延續標記被截斷在一個精確的16kb。(16384個字符)。
在寫這篇文章之前,我已經檢查了很多東西,但是我似乎無法弄清楚它。我沒有看到任何會導致這種情況的guzzle配置。是否有什么默認值需要我修改?
uj5u.com熱心網友回復:
這是 curl 7.58 的一個錯誤。curl 應該支持CURL_MAX_HTTP_HEADER(100kB)的最大頭尺寸。請參閱這個問題和這個電子郵件鏈。
。在bug修復之前,curl會在將頭檔案傳遞給頭檔案回呼函式(doc)之前,意外地砍掉超過CURL_MAX_WRITE_SIZE(16kB)的頭檔案。Guzzle受到了影響,因為它在內部使用了CURLOPT_HEADERFUNCTION(Guzzle源代碼,PHP檔案)。
解決方案是升級你的系統的curl安裝,這可能不是件容易的事。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/319761.html
標籤:
