web-dev-qa-db-fra.com

Comment puis-je exécuter TOUTES les requêtes HTTP via le proxy de débogage Charles Web, y compris celles en ligne de commande?

J'utilise le logiciel Charles Web Debugging Proxy pour déboguer les demandes HTTP. Cela fonctionne très bien avec les navigateurs de mon ordinateur, Chrome et Firefox, et il voit même les requêtes HTTP faites par d’autres programmes.

Quand je lance Charles et que je vérifie la configuration du réseau, je pense comprendre comment cela fonctionne: il configure simplement un proxy pour toutes les demandes HTTP et HTTPS, puis les écoute sur le port 8888:

enter image description here

Cependant, l'élément que je ne peux pas comprendre est que je ne vois aucune demande initiée par le terminal, telle que wget, curl ou le navigateur elinks.

Je sais que je peux spécifier le proxy avec curl et wget en utilisant 127.0.0.1:8888, mais je ne comprends pas si l'interface réseau est configurée avec un proxy dans la configuration, pourquoi il me faudrait spécifier manuellement le proxy pour eux .

De plus, je n'arrive pas non plus à faire apparaître BlueCrab (copieur de site Web) dans Charles - et je ne vois pas de paramètre de proxy pour cela - bien que je pense qu'il utilise un wrapper XWindow ou quelque chose du genre (donc ce n'est pas vraiment un natif Application cacao/carbone):

enter image description here

Comment puis-je faire en sorte que toutes les requêtes HTTP de mon système passent par Charles?

Clarification

Ma question concerne les principes de base du système expliquant pourquoi curl et wget n’utilisent pas de proxy lorsque l’interface réseau a été configurée pour en utiliser un de plus que pour demander la syntaxe correcte pour curl, wget, etc.

24
cwd

VPN créerait un nouveau périphérique réseau, vous pourrez le voir dans la commande ifconfig, puis acheminera tout le réseau système vers ce périphérique, vous pourrez voir la route utiliser la commande route.

Mais le proxy HTTP (dans ce cas, Charles) est différent, il suffit d'ouvrir un port; pour l'utiliser, vous devez spécifier le paramètre de votre application lui permettant d'utiliser ce port pour les commandes HTTP. et comme la réponse de Kevin Reid, curl, wget etc. ne lisent pas les paramètres système d’OS X.


Si votre proxy est SOCKS (Charles prend en charge HTTP et SOCKS), vous pouvez utiliser ProxyChains ou tsocks pour l'application ne prend pas en charge le paramétrage du proxy.

par exemple.:

$ proxychains git clone https://github.com/rofl0r/proxychains-ng
4
Mengdi Gao

wget derrière proxy (vous devrez peut-être créer le fichier rc) source

`$ vim ~/.wgetrc`

Ajoutez la ligne suivante:

http_proxy=http://127.0.0.1:8888

curl derrière le proxy source

$ vim ~/.curlrc

Ajoutez la ligne suivante:

proxy = 127.0.0.1:8888

se lie derrière le proxy source

Trouvez votre fichier elinks.conf avec:

Sudo find / -name elinks.conf

Ajoutez la ligne suivante:

protocol.http.proxy.Host "127.0.0.1:8888"

Pas sûr de BlueCrab

18
Dez

La raison pour laquelle vous n'obtenez pas simplement un proxy de toutes les demandes HTTP est parce que, sur le système d'exploitation niveau, il n’existe pas de "requête HTTP"; il n'y a que TCP connexions. Contacter un proxy HTTP signifie modifier légèrement la requête HTTP et contacter le serveur proxy au lieu de l'hôte nommé dans l'URL. Cette opération doit donc être effectuée dans le code qui implémente l'envoi des requêtes HTTP.

curl et wget ont leur propre code HTTP, qui utilise leurs propres fichiers de configuration - ils n'ont pas été programmés pour rechercher les paramètres de proxy où Mac OS X les conserve, ni les bibliothèques HTTP fournies avec Mac OS X qui utilisent ce proxy réglages.

11
Kevin Reid

Si vous ne voulez pas toucher vos fichiers de configuration, utilisez curl pour faire:

curl http://example.com --proxy 127.0.0.1:8888

6
Olivier