2008-09-30 6 views
37

Je dois tester une interaction HTTP avec un client que je préfère ne pas modifier. Ce que j'ai besoin de tester est le comportement du serveur lorsque les requêtes du client incluent un certain en-tête statique.Configurer un proxy HTTP pour insérer un en-tête

Je pense que la façon la plus simple d'exécuter ce test est de configurer un proxy HTTP qui insère l'en-tête à chaque requête. Quelle serait la manière la plus simple d'établir ceci?

Répondre

59

je fais quelque chose comme ça dans mon environnement de développement en configurant Apache sur le port 80 en tant que proxy pour mon serveur d'application sur le port 8080, avec l'Apache suivant config:

NameVirtualHost * 
<VirtualHost *> 
    <Proxy http://127.0.0.1:8080/*> 
     Allow from all 
    </Proxy> 
    <LocationMatch "/myapp"> 
     ProxyPass http://127.0.0.1:8080/myapp 
     ProxyPassReverse http://127.0.0.1:8080/myapp 
     Header add myheader "myvalue" 
     RequestHeader set myheader "myvalue" 
    </LocationMatch> 
</VirtualHost> 

Voir la documentation LocationMatch et RequestHeader.

Ceci ajoute l'en-tête myheader: myvalue aux demandes envoyées au serveur d'applications.

+11

Il ajoutera également myheader: myvalue aux en-têtes de réponse. Le document complet sur Apache mod_headers: http://httpd.apache.org/docs/current/mod/mod_headers.html –

+1

@Fred: Alors, comment pouvons-nous restreindre les en-têtes à apparaître dans la requête mandatée seulement? –

+4

Well Header ajoute à la réponse et RequestHeader à la requête du serveur derrière le proxy. Ce que j'ai fait à partir de ceci est de m'assurer qu'une requête settings.xml ne sera jamais mise en cache par un autre proxy, et j'ai fait: SetEnvIf Request_URI "\ settings.xml $" object_is_settings_xml Jeu d'en-têtes Cache-Control "no-cache, no-store" env = object_is_settings_xml Header set Expire "Jeu, 01 Jan 1970 00:00:00 GMT" env = objet_is_settings_xml En-tête set Pragma "no-cache" env = objet_is_settings_xml –

3

je voudrais essayer tinyproxy. en fait, le Vey mieux serait de embedd un langage de script, il ... sonne comme un travail parfait pour Lua, surtout après avoir vu à quel point il a travaillé pour mysqlproxy

2

J'ai eu des collègues qui ont utilisé Burp (» un serveur proxy HTTP/S interactif pour attaquer et tester les applications web ") pour cela. Vous pouvez également utiliser Fiddler ("un proxy de débogage HTTP").

14

Vous pouvez également installer Fiddler (http://www.fiddler2.com/fiddler2/) qui est très facile à installer (plus facile qu'Apache par exemple). Après le lancement, il s'enregistrera en tant que proxy système. Ensuite, ouvrez le menu "Règles" et choisissez "Personnaliser les règles ..." pour ouvrir un fichier JScript qui vous permettra de personnaliser les requêtes.

Pour ajouter un en-tête personnalisé, il suffit d'ajouter une ligne dans la fonction OnBeforeRequest:

oSession.oRequest.headers.Add("MyHeader", "MyValue"); 
0

Plutôt que d'utiliser un proxy, j'utilise le plugin Firefox "Modify Headers" pour insérer des en-têtes (dans mon cas, de faux un identifiant utilisant le Single Sign On pour pouvoir tester différentes personnes).

+1

Afaik la question n'était pas spécifique à firefox. – peterh

+0

@peterh non, mais si vous êtes flexible quant au navigateur que vous pouvez utiliser, il est beaucoup plus facile d'ajouter un plugin à Firefox que de configurer une instance Apache. –

0

Si vous avez ruby ​​sur votre système, que diriez-vous d'un petit Ruby Proxy utilisant Sinatra (assurez-vous d'installer le Gem Sinatra). Cela devrait être plus facile que de configurer Apache. Le code peut être trouvé here.

Questions connexes