PHP cURL جاۋابى كېسىلگەنمۇ؟
Content-Length بىلەن چۈشۈرۈلگەن چوڭلۇقنى سېلىشتۇرۇشتىن بۇرۇن cURL نىڭ يۆتكەش نەتىجىسى، جاۋاب ھالىتى ۋە گەۋدە ئىپادىسىنى تەكشۈرۈڭ.
Proxy ئارقىلىق چۈشۈرۈلگەن بەت تولۇق ئەمەس كۆرۈنگەندە cURL نىڭ نەتىجىسىدىن باشلاڭ. قىسقا جاۋاب، مەغلۇپ بولغان يۆتكەش ۋە تولۇق توسۇش بېتى ئوخشىمىغان چۈشەندۈرۈشنى تەلەپ قىلىدۇ.
مەۋجۇت سەپلەنگەن handle دا CURLOPT_RETURNTRANSFER ئوچۇق بولغاندا:
$body = curl_exec($ch);
if ($body === false) {
throw new RuntimeException(curl_error($ch), curl_errno($ch));
}
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$downloaded = curl_getinfo($ch, CURLINFO_SIZE_DOWNLOAD_T);
$declared = curl_getinfo($ch, CURLINFO_CONTENT_LENGTH_DOWNLOAD_T);
بۇ قىممەتلەرنى handle نى قويۇپ بېرىشتىن بۇرۇن توپلاڭ. قاتتىق سېلىشتۇرۇش يۆتكەش مەغلۇبىيىتىنى قۇرۇق تىزىق ياكى “0” دەك مۇۋەپپەقىيەتلىك گەۋدىلەردىن ئايرىيدۇ. HTTP خاتالىق ھالەتلىرى ئاپتوماتىك curl_exec مەغلۇبىيىتى ئەمەس، شۇڭا ھالەتنىمۇ چۈشەندۈرۈڭ.
چۈشۈرۈلگەن بايت سانلىقى باش ئېتىكىلارنى ئۆز ئىچىگە ئالمايدۇ. ئېلان قىلىنغان قىممەت Content-Length دىن كېلىدۇ ۋە چوڭلۇق نامەلۇم بولغاندا -1 بولىدۇ. جاۋاب Content-Length نى قانۇنلۇق تاشلىيالايدۇ؛ نامەلۇم قىممەت كېسىلگەن ھۆججەتنىڭ دىئاگنوزى ئەمەس.
ئاپتوماتىك مەزمۇن كودلاشتىن چىقىرىش يەنە بىر پەرق ئېلىپ كېلىدۇ. Content-Length ئادەتتە پىرىسلانغان ئىپادىنى تەسۋىرلەيدۇ، PHP تىزىقىدا بولسا ئېچىلغان بايتلار بولۇشى مۇمكىن. strlen($body) نى شۇ باش ئېتىكى بىلەن سېلىشتۇرۇش ئوخشىمىغان ئىپادىلەرنى سېلىشتۇرۇش بولىدۇ.
يۆتكەش كۈتۈلگەن چوڭلۇقنى بۇزغاندا cURL CURLE_PARTIAL_FILE نى دوكلات قىلىشى مۇمكىن. قۇرۇق ئەمەس ھەر قانداق چىقىرىشنى مۇۋەپپەقىيەت دەپ قاراشنىڭ ئورنىغا شۇ خاتالىقنى ساقلاڭ. ئەكسىچە، كىچىك 200 جاۋابى بىلەن مۇۋەپپەقىيەتلىك يۆتكەش مەنبە ياكى proxy قايتۇرۇشنى تاللىغان پۈتۈن بەت بولۇشى مۇمكىن.
ئاخىرىدا كېرەكلىك مەزمۇننى تەكشۈرۈڭ. cURL ئېلىپ كەلگەن HTML بەتنى تولدۇرۇش ئۈچۈن JavaScript ئىجرا قىلمايدۇ. توركۆرگۈ كۆرسىتىدىغان بۆلەكلەر ھەر بىر ئەۋەتىلگەن بايت يېتىپ كەلگەندىمۇ ئەسلى جاۋابتا بولماسلىقى مۇمكىن.