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
Susan Sarandonasal
2024-12-31 11:19:14856semak imbas

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");
}

Walau bagaimanapun, permintaan sebenar yang dihantar kepada pelayan ialah:

GET // HTTP/1.1
Host: example.com
Connection: Keep-Alive

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);
}

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!

Kenyataan:
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