PHP cURL дамжуулалтыг биеийн угтварын дараа зогсоох
Бичих callback-д хязгаарлагдмал угтвар хадгалж, тэр callback-аас санаатай үүсгэсэн бичих алдааг л танина уу.
cURL-ын бичих callback нь биеийн хязгаарлагдмал угтварыг хадгалж, тэр хязгаарт хүрмэгц дамжуулалтыг зогсоож чадна. Тэр санаатай зогсолтыг өөр бичих алдаанаас ялгахын тулд өөрийн туг ашиглана уу.
Зорилтот URL нь аль хэдийн тохируулагдсан шинэ handle-ийн хувьд:
$limit = 32768;
$prefix = '';
$limitReached = false;
curl_setopt_array($ch, [
CURLOPT_PROXY => 'socks5h://proxy.example.net:1080',
CURLOPT_HEADER => false,
CURLOPT_WRITEFUNCTION => function ($handle, $chunk)
use (&$prefix, &$limitReached, $limit) {
$remaining = $limit - strlen($prefix);
$prefix .= substr($chunk, 0, $remaining);
if (strlen($prefix) >= $limit) {
$limitReached = true;
return 0;
}
return strlen($chunk);
},
]);
$result = curl_exec($ch);
$error = curl_errno($ch);
$expectedStop = $limitReached && $error === CURLE_WRITE_ERROR;
if ($result === false && !$expectedStop) {
throw new RuntimeException(curl_error($ch), $error);
}
Proxy URL-ын socks5h схем нь proxy-гоос зорилтот хост нэрийг шийдвэрлэхийг хүснэ. Үзүүлсэн шинэ handle дээр зөвшөөрөгдсөн нийтийн зорилтот туршилтад SOCKS5 proxy жагсаалтын бүртгэлгүй бичлэг тэр endpoint-ийг өгч чадна. TLS гэрчилгээний шалгалт ердийн тохиргоогоо хадгална.
Хоосон бус хэсэгт тэг буцаах нь libcurl-д callback өгсөн өгөгдлийг хүлээж аваагүй гэдгийг мэдэгдэнэ. Энэ нь CURLE_WRITE_ERROR-оор тасалдана. Энд зөвхөн тэр алдаа болон callback-ын limitReached тугийн хослолыг хүлээгдэж буй гэж үзнэ.
Хязгаараас богино хариулт хэвийн дуусна. Хязгаарт эсвэл түүнээс дээш үед prefix хамгийн ихдээ 32 KiB хадгална, сүүлийн callback илүү том хэсэг авсан ч. Хэсгийн хэмжээ өөр өөр байдаг; хүссэн буфер хэмжээ нь тогтмол урттай дуудлагын баталгаа биш.
Энэ нь хадгалагдсан биеийг хязгаарладаг бөгөөд холболт дээр аль хэдийн буферлэгдсэн эсвэл дамжуулагдсан бүх байтыг биш. Угтвар нь олон байт тэмдэгт, JSON утга эсвэл HTML элементийн дотор дуусч болно, тиймээс үүнийг бүрэн задлан шинжлэх боломжтой баримт бичиг гэж бүү үзээрэй.