ਬਾਡੀ ਪ੍ਰੀਫਿਕਸ ਤੋਂ ਬਾਅਦ PHP cURL ਟ੍ਰਾਂਸਫਰ ਰੋਕੋ
ਰਾਈਟ ਕਾਲਬੈਕ ਵਿੱਚ ਸੀਮਿਤ ਪ੍ਰੀਫਿਕਸ ਰੱਖੋ ਅਤੇ ਸਿਰਫ਼ ਉਹੀ ਰਾਈਟ ਗਲਤੀ ਪਛਾਣੋ ਜੋ ਉਸ ਕਾਲਬੈਕ ਨੇ ਜਾਣਬੁੱਝ ਕੇ ਪੈਦਾ ਕੀਤੀ ਹੈ।
cURL ਰਾਈਟ ਕਾਲਬੈਕ ਸੀਮਿਤ ਬਾਡੀ ਪ੍ਰੀਫਿਕਸ ਰੱਖ ਸਕਦਾ ਹੈ ਅਤੇ ਉਹ ਸੀਮਾ ਪੂਰੀ ਹੁੰਦੇ ਹੀ ਟ੍ਰਾਂਸਫਰ ਰੋਕ ਸਕਦਾ ਹੈ। ਉਸ ਜਾਣਬੁੱਝ ਕੇ ਕੀਤੇ ਰੋਕ ਨੂੰ ਕਿਸੇ ਹੋਰ ਰਾਈਟ ਅਸਫਲਤਾ ਤੋਂ ਵੱਖ ਪਛਾਣਨ ਲਈ ਆਪਣਾ ਫ਼ਲੈਗ ਵਰਤੋ।
ਉਸ ਨਵੇਂ ਹੈਂਡਲ ਲਈ ਜਿਸ ਦਾ ਟਾਰਗੈਟ URL ਪਹਿਲਾਂ ਹੀ ਸੰਰਚਿਤ ਹੈ:
$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);
}
ਪ੍ਰੌਕਸੀ URL ਦੀ socks5h ਸਕੀਮ ਪ੍ਰੌਕਸੀ ਨੂੰ ਟਾਰਗੈਟ ਹੋਸਟਨਾਮ ਹੱਲ ਕਰਨ ਲਈ ਕਹਿੰਦੀ ਹੈ। ਦਿਖਾਏ ਨਵੇਂ ਹੈਂਡਲ 'ਤੇ ਮਨਜ਼ੂਰ ਜਨਤਕ-ਟਾਰਗੈਟ ਟੈਸਟ ਲਈ SOCKS5 ਪ੍ਰੌਕਸੀ ਸੂਚੀ ਤੋਂ ਬਿਨਾਂ ਖਾਤੇ ਵਾਲੀ ਐਂਟਰੀ ਉਹ ਐਂਡਪੌਇੰਟ ਦੇ ਸਕਦੀ ਹੈ। TLS ਸਰਟੀਫਿਕੇਟ ਜਾਂਚ ਆਪਣੀਆਂ ਆਮ ਸੈਟਿੰਗਾਂ ਰੱਖਦੀ ਹੈ।
ਖਾਲੀ ਨਾ ਹੋਣ ਵਾਲੇ ਚੰਕ ਲਈ ਜ਼ੀਰੋ ਵਾਪਸ ਕਰਨਾ libcurl ਨੂੰ ਦੱਸਦਾ ਹੈ ਕਿ ਕਾਲਬੈਕ ਨੇ ਦਿੱਤਾ ਡੇਟਾ ਸਵੀਕਾਰ ਨਹੀਂ ਕੀਤਾ। ਇਹ CURLE_WRITE_ERROR ਨਾਲ ਰੁਕਦਾ ਹੈ। ਇੱਥੇ ਸਿਰਫ਼ ਉਸ ਗਲਤੀ ਅਤੇ ਕਾਲਬੈਕ ਦੇ limitReached ਫ਼ਲੈਗ ਦੇ ਮੇਲ ਨੂੰ ਹੀ ਉਮੀਦਯੋਗ ਮੰਨਿਆ ਜਾਂਦਾ ਹੈ।
ਸੀਮਾ ਤੋਂ ਛੋਟਾ ਜਵਾਬ ਆਮ ਤੌਰ 'ਤੇ ਖ਼ਤਮ ਹੁੰਦਾ ਹੈ। ਸੀਮਾ 'ਤੇ ਜਾਂ ਉਸ ਤੋਂ ਵੱਧ ਹੋਣ 'ਤੇ prefix ਵੱਧ ਤੋਂ ਵੱਧ 32 KiB ਰੱਖਦਾ ਹੈ, ਭਾਵੇਂ ਆਖ਼ਰੀ ਕਾਲਬੈਕ ਵੱਡਾ ਚੰਕ ਪ੍ਰਾਪਤ ਕਰੇ। ਚੰਕ ਦੇ ਆਕਾਰ ਬਦਲਦੇ ਹਨ; ਮੰਗਿਆ ਬਫ਼ਰ ਆਕਾਰ ਸਥਿਰ ਲੰਬਾਈ ਦੀਆਂ ਕਾਲਾਂ ਦੀ ਗਰੰਟੀ ਨਹੀਂ।
ਇਹ ਰੱਖੀ ਬਾਡੀ ਨੂੰ ਸੀਮਿਤ ਕਰਦਾ ਹੈ, ਕਨੈਕਸ਼ਨ 'ਤੇ ਪਹਿਲਾਂ ਹੀ ਬਫ਼ਰ ਹੋਏ ਜਾਂ ਟ੍ਰਾਂਸਫਰ ਹੋਏ ਹਰ ਬਾਈਟ ਨੂੰ ਨਹੀਂ। ਪ੍ਰੀਫਿਕਸ ਮਲਟੀ-ਬਾਈਟ ਅੱਖਰ, JSON ਮੁੱਲ ਜਾਂ HTML ਐਲੀਮੈਂਟ ਦੇ ਅੰਦਰ ਖ਼ਤਮ ਹੋ ਸਕਦਾ ਹੈ, ਇਸ ਲਈ ਇਹ ਨਾ ਮੰਨੋ ਕਿ ਇਹ ਪੂਰੀ ਤਰ੍ਹਾਂ ਪਾਰਸ ਹੋਣ ਯੋਗ ਦਸਤਾਵੇਜ਼ ਹੈ।