Maison > développement back-end > C++ > Comment puis-je empêcher le codage d'URL de modifier une barre oblique codée en pourcentage dans une requête GET ?

Comment puis-je empêcher le codage d'URL de modifier une barre oblique codée en pourcentage dans une requête GET ?

Linda Hamilton
Libérer: 2025-01-05 03:38:43
original
638 Les gens l'ont consulté

How Can I Prevent URL Encoding from Modifying a Percent-Encoded Slash in a GET Request?

Surmonter le dilemme de codage d'URL Slash lors des requêtes GET

Dans le but d'envoyer une requête HTTP GET à une URL contenant un pourcentage codé barre oblique (/), telle que "http://example.com//", une approche courante consiste à utiliser la classe WebClient comme suit :

using (WebClient webClient = new WebClient())
{
  webClient.DownloadData("http://example.com/%2F");
}
Copier après la connexion

Cependant, cette méthode aboutit à un résultat inattendu. Le caractère slash est transformé en une barre oblique supplémentaire lors de la transmission, ce qui entraîne l'envoi de la requête suivante :

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

Ce problème survient lors de l'utilisation d'OCSP sur HTTP/GET, qui nécessite la transmission d'un véritable / au lieu de '/ ' pour garantir le respect du protocole.

Une solution potentielle

Bien qu'il ne soit pas idéal, le code suivant L'extrait présente une solution de contournement au problème :

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

Cette solution de contournement implique de modifier les indicateurs internes de l'objet Uri pour forcer CanonicalPathAndQuery, garantissant ainsi que le caractère barre oblique est préservé pendant la transmission.

Avertissement

Il est important de noter que cette approche n'est pas garantie d'être compatible avec les futures versions de le cadre. Procédez toujours avec prudence lorsque vous modifiez le comportement interne d'une classe.

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!

source:php.cn
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