Κεφαλίδες PHP cURL μέσω διαμεσολαβητή: CONNECT έναντι αποκρίσεων προορισμού
Διατηρήστε ξεχωριστές τις κεφαλίδες CONNECT, ταυτοποίησης, ανακατεύθυνσης και τελικής απόκρισης όταν μια μεταφορά PHP cURL χρησιμοποιεί διαμεσολαβητή.
Συλλέξτε τις γραμμές κεφαλίδων χωριστά από το σώμα της απόκρισης. Μια μεταφορά μέσω διαμεσολαβητή μπορεί να παραδώσει κεφαλίδες CONNECT, ταυτοποίησης, ανακατεύθυνσης και απόκρισης προορισμού σε μία λειτουργία:
$headerLines = [];
curl_setopt($handle, CURLOPT_HEADERFUNCTION,
function ($handle, $line) use (&$headerLines) {
$headerLines[] = $line;
return strlen($line);
}
);
Αυτή η επιστροφή κλήσης διατηρεί την ακατέργαστη ακολουθία γραμμών και επιστρέφει τον αριθμό των byte που έγιναν δεκτά. Λαμβάνει πλήρεις γραμμές· ωστόσο δεν τις ομαδοποιεί ακόμη σε αποκρίσεις ούτε επιλέγει τις κεφαλίδες του τελικού ιστότοπου.
Ερμηνεύστε την ακολουθία ως μπλοκ
Μια γραμμή κατάστασης HTTP ξεκινά ένα μπλοκ απόκρισης και μια κενή γραμμή τερματίζει τις κεφαλίδες του. Διατηρήστε αυτά τα όρια πριν επιλέξετε την τελική απόκριση προορισμού. Οι ενδιάμεσες απόπειρες ταυτοποίησης και οι ανακατευθύνσεις μπορούν καθεμία να προσθέσει μπλοκ.
Τα trailers μπορεί να φτάσουν αργότερα μέσω της επιστροφής κλήσης. Κρατήστε αρκετή κατάσταση του αναλυτή ώστε να τα ξεχωρίζετε από τις αρχικές κεφαλίδες, αντί να προσαρτάτε κάθε μεταγενέστερο πεδίο στην πρώτη απόκριση.
Διατηρήστε ή καταστείλετε την απόδειξη της σήραγγας
Διαβάστε το CURLINFO_HTTP_CONNECTCODE ξεχωριστά για την κατάσταση CONNECT της σήραγγας HTTPS. Μια αποδεκτή σήραγγα δεν αποδεικνύει επιτυχή απόκριση του ιστότοπου.
Αν οι κεφαλίδες CONNECT δεν είναι απαραίτητες για τον συλλέκτη, το CURLOPT_SUPPRESS_CONNECT_HEADERS ελέγχει την παράδοσή τους στη διαμορφωμένη έξοδο κεφαλίδων και στις διαδρομές επιστροφής κλήσης. Ελέγξτε την υποστήριξη στη συνδεδεμένη libcurl και στην έκδοση PHP. Η καταστολή απλοποιεί τη συλλογή, αλλά αφαιρεί την απόδειξη σήραγγας σε επίπεδο κεφαλίδων που μπορεί να βοηθήσει τη διάγνωση.
Μην ανακτάτε το σώμα με σταθερή μετατόπιση ή αναζητώντας ετικέτα HTML. Τα μεγέθη κεφαλίδων ποικίλλουν, οι ενδιάμεσες αποκρίσεις διαφέρουν και το σώμα μπορεί να είναι δυαδικό ή κενό. Μια παλιά αναφορά σφάλματος ειδική για έκδοση δεν δικαιολογεί μετατόπιση που εικάζεται.
Κρατήστε τη διαχείριση του σώματος ξεχωριστή και διατηρήστε το σφάλμα μεταφοράς μαζί με τα παρατηρούμενα στάδια απόκρισης αν αποτύχει η συλλογή ή η ανάλυση. Αυτό διακρίνει μια διακοπείσα επιστροφή κλήσης, παραμορφωμένα δεδομένα εφαρμογής και μια απορριφθείσα ανταλλαγή μέσω διαμεσολαβητή.