დაიწყეთ 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 პასუხით შეიძლება იყოს მთელი ის გვერდი, რომლის დაბრუნებაც წყარომ ან პროქსიმ აირჩია.

და ბოლოს შეამოწმეთ საჭირო შიგთავსი. cURL-ის მიერ მოტანილი HTML გვერდის შესავსებად JavaScript-ს არ ასრულებს. ბრაუზერის მიერ ნაჩვენები სექციები შეიძლება არ იყოს თავდაპირველ პასუხში, მაშინაც კი, როცა ყოველი გადაცემული ბაიტი ჩამოვიდა.

დაკავშირებული სტატიები