Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Mengekalkan Garis Slash Literal dalam Permintaan GET HTTP Dikodkan URL?

Bagaimanakah Saya Boleh Mengekalkan Garis Slash Literal dalam Permintaan GET HTTP Dikodkan URL?

Susan Sarandon
Lepaskan: 2024-12-31 11:19:14
asal
849 orang telah melayarinya

How Can I Preserve Literal Slashes in URL-Encoded HTTP GET Requests?

Pengekodan URL: Mengekalkan Seratan Literal dalam HTTP GET

Dalam permintaan HTTP GET, pengekodan URL adalah penting untuk menghantar aksara khas yang bukan sebahagian daripada set aksara standard. Walau bagaimanapun, apabila laluan URL mengandungi garis miring (/), pelaksanaan GET tertentu secara automatik menterjemahkannya ke dalam sintaks slash berganda (//). Ini boleh menjadi masalah apabila menghantar aksara slash yang dikodkan URL, kerana ia adalah penting untuk pematuhan dengan protokol seperti OCSP melalui HTTP/GET.

Coretan kod berikut menggambarkan isu:

using (WebClient webClient = new WebClient())
{
  webClient.DownloadData("http://example.com/%2F");
}
Salin selepas log masuk

Walau bagaimanapun, permintaan sebenar yang dihantar kepada pelayan ialah:

GET // HTTP/1.1
Host: example.com
Connection: Keep-Alive
Salin selepas log masuk

Untuk mengekalkan literal slash dalam HTTP GET, penyelesaian tersuai diperlukan. Berikut ialah coretan kod yang mengubah suai objek Uri untuk mengekalkan laluan dan pertanyaan:

Uri uri = new Uri("http://example.com/%2F");
ForceCanonicalPathAndQuery(uri);
using (WebClient webClient = new WebClient())
{
  webClient.DownloadData(uri);
}

void ForceCanonicalPathAndQuery(Uri uri){
  string paq = uri.PathAndQuery; // need to access PathAndQuery
  FieldInfo flagsFieldInfo = typeof(Uri).GetField("m_Flags", BindingFlags.Instance | BindingFlags.NonPublic);
  ulong flags = (ulong) flagsFieldInfo.GetValue(uri);
  flags &= ~((ulong) 0x30); // Flags.PathNotCanonical|Flags.QueryNotCanonical
  flagsFieldInfo.SetValue(uri, flags);
}
Salin selepas log masuk

Dengan mengubah suai objek Uri, laluan terpaksa kekal dalam keadaan asalnya, memastikan bahawa garis miring terpelihara dalam permintaan GET. Penyelesaian ini membolehkan pelaksanaan mematuhi protokol yang memerlukan garis miring berkod URL.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengekalkan Garis Slash Literal dalam Permintaan GET HTTP Dikodkan URL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan