Überwindung des Slash-URL-Kodierungsdilemmas bei GET-Anfragen
Beim Versuch, eine HTTP-GET-Anfrage an eine URL zu senden, die eine prozentkodierte URL enthält Schrägstrich (/), wie zum Beispiel „http://example.com//“, ein gängiger Ansatz ist die Verwendung der WebClient-Klasse als folgt:
using (WebClient webClient = new WebClient()) { webClient.DownloadData("http://example.com/%2F"); }
Diese Methode führt jedoch zu einem unerwarteten Ergebnis. Der Schrägstrich wird während der Übertragung in einen zusätzlichen Schrägstrich umgewandelt, was dazu führt, dass die folgende Anfrage gesendet wird:
GET // HTTP/1.1 Host: example.com Connection: Keep-Alive
Dieses Problem tritt auf, wenn OCSP über HTTP/GET verwendet wird, was die Übertragung eines tatsächlichen / anstelle von „/“ erfordert. ', um die Einhaltung des Protokolls sicherzustellen.
Eine mögliche Lösung
Obwohl nicht ideal, der folgende Codeausschnitt stellt eine Problemumgehung für das Problem dar:
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); }
Diese Problemumgehung beinhaltet die Änderung der internen Flags des Uri-Objekts, um CanonicalPathAndQuery zu erzwingen und sicherzustellen, dass der Schrägstrich während der Übertragung erhalten bleibt.
Haftungsausschluss
Es ist wichtig zu beachten, dass die Kompatibilität dieses Ansatzes mit zukünftigen Versionen des Frameworks nicht gewährleistet ist. Gehen Sie beim Ändern des internen Klassenverhaltens immer mit Vorsicht vor.
Das obige ist der detaillierte Inhalt vonWie kann ich verhindern, dass die URL-Kodierung einen prozentual kodierten Schrägstrich in einer GET-Anfrage ändert?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!