首頁 >後端開發 >C++ >如何在 URL 編碼的 HTTP GET 請求中保留文字斜線?

如何在 URL 編碼的 HTTP GET 請求中保留文字斜線?

Susan Sarandon
Susan Sarandon原創
2024-12-31 11:19:14856瀏覽

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

編碼URL:在HTTP GET 中保留文字斜線

在HTTP GET 請求中,URL 編碼對於傳輸特殊字元至關重要。不屬於標準字符集。但是,當 URL 路徑包含斜線 (/) 時,某些 GET 實作會自動將其轉換為雙斜線 (//) 語法。在傳輸 URL 編碼的斜杠字元時,這可能會出現問題,因為它們對於遵守 HTTP/GET 上的 OCSP 等協議至關重要。

以下程式碼片段說明了該問題:

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

然而,發送到伺服器的實際請求是:

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

要保留HTTP GET 中的文字斜槓,需要自訂解決方案。以下是修改 Uri 物件以保留路徑和查詢的程式碼片段:

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

透過修改 Uri 對象,路徑被迫保持其原始狀態,確保文字斜線保留在GET 請求。該解決方案允許合規地實現需要 URL 編碼斜線的協定。

以上是如何在 URL 編碼的 HTTP GET 請求中保留文字斜線?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn