Când CONNECT returnează 200 și TLS nu poate decoda imediat, inspectați octeții de graniță din conector înainte de a schimba certificatele sau cifrurile.

O valoare de autorizare generată poate să se termine deja cu un rând nou. Adăugarea încă unui sfârșit de rând poate încheia antetele HTTP prea devreme, lăsând un câmp Host dorit sau alt text simplu în spatele cererii.

O cerere HTTP/1.1 CONNECT minimă folosește CRLF între linii și o linie goală la final:

b"CONNECT example.com:443 HTTP/1.1\r\nHost: example.com:443\r\n\r\n"

Puneți orice câmp de autorizare înaintea acelei ultime linii goale, fără întrerupere de rând încorporată. În Python, "\n" reprezintă un rând nou; un șir brut care conține o bară oblică inversă și litera n nu. Verificați ce octeți produce un ajutor de codificare înainte de a încerca să-i eliminați—ajutoarele mai vechi puteau adăuga întreruperi de rând.

După ce CONNECT reușește, acei octeți rămași aparțin protocolului tunelului. Textul simplu rătăcit poate ajunge la un partener care așteaptă TLS. Starea de succes nu poate repara octeții deja aflați în coadă după o cerere malformată.

Inspectați și granița de recepție. Citiți răspunsul complet al proxy-ului înainte de a preda socketul către TLS, gestionați citirile parțiale și păstrați tot ce este citit dincolo de antete. O singură citire de socket nu trebuie să conțină un mesaj întreg.

Dacă acest parser este al dumneavoastră, comparați o reprezentare redactată a octeților cu gramatica firului; păstrați vizibile lungimile și granițele de rând ascunzând parola. Pentru o aplicație care are nevoie doar de o conexiune proxy, un conector întreținut evită necesitatea de a deține acest cod de încadrare.

Articole similare