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
Libérer: 2024-12-31 11:19:14
original
882 Les gens l'ont consulté

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");
}
Copier après la connexion

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

GET // HTTP/1.1
Host: example.com
Connection: Keep-Alive
Copier après la connexion

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);
}
Copier après la connexion

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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal