Maison >développement back-end >C++ >Comment puis-je conserver les barres obliques littérales dans les requêtes HTTP GET codées en URL ?

Comment puis-je conserver les barres obliques littérales dans les requêtes HTTP GET codées en URL ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-31 11:19:14868parcourir

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

Encodage des URL : préserver la barre oblique littérale dans les requêtes HTTP GET

Dans les requêtes HTTP GET, l'encodage d'URL est crucial pour transmettre des caractères spéciaux qui sont ne fait pas partie du jeu de caractères standard. Cependant, lorsqu'un chemin d'URL contient une barre oblique (/), certaines implémentations GET la traduisent automatiquement dans la syntaxe double barre oblique (//). Cela peut être problématique lors de la transmission de caractères barre oblique codés en URL, car ils sont essentiels à la conformité avec des protocoles tels que OCSP sur HTTP/GET.

L'extrait de code suivant illustre le problème :

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

Cependant, la requête réelle envoyée au serveur est :

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

Pour conserver la barre oblique littérale dans les HTTP GET, une solution personnalisée est requise. Voici un extrait de code qui modifie l'objet Uri pour préserver le chemin et la requête :

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

En modifiant l'objet Uri, le chemin est forcé de rester dans son état d'origine, garantissant que la barre oblique littérale est préservée dans la requête GET. Cette solution permet une mise en œuvre conforme des protocoles nécessitant des barres obliques codées en URL.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn