PHP cURL proxy başlıkları: CONNECT ve hedef yanıtları
Bir PHP cURL aktarımı proxy kullandığında CONNECT, kimlik doğrulama, yönlendirme ve son yanıt başlıklarını ayrı tutun.
Başlık satırlarını yanıt gövdesinden ayrı toplayın. Proxy üzerinden bir aktarım CONNECT, kimlik doğrulama, yönlendirme ve hedef yanıt başlıklarını tek işlemde teslim edebilir:
$headerLines = [];
curl_setopt($handle, CURLOPT_HEADERFUNCTION,
function ($handle, $line) use (&$headerLines) {
$headerLines[] = $line;
return strlen($line);
}
);
Bu geri çağırma ham satır sırasını korur ve kabul edilen bayt sayısını döndürür. Tam satırlar alır; ancak bunları henüz yanıtlara gruplamaz veya son web sitesinin başlıklarını seçmez.
Sırayı bloklar olarak yorumlayın
Bir HTTP durum satırı bir yanıt bloğu başlatır ve boş bir satır o bloğun başlıklarını bitirir. Son hedef yanıtını seçmeden önce bu sınırları koruyun. Ara kimlik doğrulama denemeleri ve yönlendirmeler her biri bloklar ekleyebilir.
Trailer'lar daha sonra geri çağırma yoluyla gelebilir. Her sonraki alanı ilk yanıta eklemek yerine, onları başlangıç başlıklarından ayırmak için yeterli ayrıştırıcı durumu tutun.
Tünel kanıtını koruyun veya bastırın
HTTPS tünelinin CONNECT durumu için CURLINFO_HTTP_CONNECTCODE değerini ayrı okuyun. Kabul edilen bir tünel başarılı bir web sitesi yanıtı kanıtlamaz.
Toplayıcı CONNECT başlıklarına ihtiyaç duymuyorsa, CURLOPT_SUPPRESS_CONNECT_HEADERS bunların yapılandırılmış başlık çıktısına ve geri çağırma yollarına teslimini denetler. Bağlı libcurl ve PHP derlemesindeki desteği kontrol edin. Bastırma toplamayı basitleştirir ancak tanılamaya yardımcı olabilecek başlık düzeyindeki tünel kanıtını kaldırır.
Gövdeyi sabit bir ofsetle veya bir HTML etiketi arayarak geri kurtarmayın. Başlık boyutları değişir, ara yanıtlar farklıdır ve gövde ikili veya boş olabilir. Sürüme özgü eski bir hata raporu tahmin edilen bir ofseti haklı çıkarmaz.
Gövde işlemeyi ayrı tutun ve toplama veya ayrıştırma başarısız olursa aktarım hatasını gözlenen yanıt aşamalarıyla birlikte saklayın. Bu, kesilen bir geri çağırmayı, bozuk uygulama verilerini ve reddedilen proxy alışverişini birbirinden ayırır.