exécution de requêtes HTTP avec cURL (à l'aide de PROXY)

451

J'ai cette adresse proxy: 125.119.175.48:8909

Comment puis-je effectuer une requête HTTP en utilisant cURL comme curl http://www.example.com, mais en spécifiant l'adresse proxy de mon réseau?

user873286
la source

Réponses:

411

Manière générale:

export http_proxy=http://your.proxy.server:port/

Ensuite, vous pouvez vous connecter via un proxy à partir de (nombreuses) applications.

Et, selon le commentaire ci-dessous, pour https:

export https_proxy=https://your.proxy.server:port/
airween
la source
76
Lorsque vous devez proxy du trafic HTTPS, la variable d'environnement est en majuscules: HTTPS_PROXY
phatblat
18
Depuis les pages de manuel Les variables d'environnement peuvent être spécifiées en minuscules ou en majuscules. La version minuscule a priorité. http_proxy est une exception car il n'est disponible qu'en minuscules. L'utilisation d'une variable d'environnement pour définir le proxy a le même effet que l'utilisation de l'option --proxy.
Captain Lepton
@BipinVayalu, que voulez-vous vérifier? De cette façon, ce que je décris ci-dessus, le client utilise le proxy "voie directe", pas de manière transparente. Ainsi, le proxy donne les réponses HTTP standard (y compris les codes HTTP). Si vous exportez une variable d'environnement http_proxy incorrecte (par exemple, mauvais port ...), le client ne peut pas s'y connecter et il affiche un message d'erreur: "Avertissement! Impossible de se connecter à l'hôte distant!", Ou quelque chose de similaire - essayez-le :)
airween
15
Si vous vérifiez le code source de curl, vous verrez sur url.c (ligne 4337 dans la version 7.39) qu'ils vérifient la version en minuscules et s'ils ne le trouvent pas, vérifiez les majuscules.
Raistmaj
1
La plupart des utilisateurs m'ont envoyé une correction, maintenant je la partage. Si vous souhaitez utiliser une connexion HTTPS via un proxy, vous devez le faire: export https_proxy = your.proxy.server: port Remarque, il existe une proto "http" dans le schéma d'URL, pas httpS!
airween
663

De man curl:

-x, --proxy <[protocol://][user:password@]proxyhost[:port]>

     Use the specified HTTP proxy. 
     If the port number is not specified, it is assumed at port 1080.
Karl Barker
la source
curl: (7) n'a pas pu se connecter à l'hôte curl: (7) n'a pas pu se connecter à l'hôte
user873286
J'obtiens l'erreur ci-dessus lorsque j'exécute cette commande: curl -x, --proxy 122.72.2.200:80 mysite.com/test.php?id=1
user873286
61
"-x, --proxy" signifie que l'un ou l'autre peut être utilisé. La commande doit être "curl -x 122.72.2.200:80 mysite.com/test.php?id=1 " ou "curl --proxy 122.72.2.200:80 mysite.com/test.php?id=1 "
IBBoard
8
Les documents sont correctement cités comme ci-dessus, cependant, l'utilisateur et le mot de passe doivent être exprimés différemment:-x user:password@proxyhost:port
Ed Chapel
Merci pour la meilleure réponse!
haotang
128

Les solutions ci-dessus peuvent ne pas fonctionner avec certaines versions de curl, je les ai essayées moi-même (curl 7.22.0). Mais ce qui a fonctionné pour moi, c'est:

curl -x http://proxy_server:proxy_port --proxy-user username:password -L http://url

J'espère que cela résoudra mieux le problème!

Amar
la source
Rencontrez le même problème, la boucle livrée par Debian Wheezy ne prend toujours pas en charge l'astuce env
hyperknot
[1] 4812
Je l'ai à la
80

Sachez que si vous utilisez un proxy SOCKS, au lieu d'un proxy HTTP / HTTPS, vous devrez utiliser le --socks5commutateur à la place:

curl --socks5 125.119.175.48:8909 http://example.com/

Vous pouvez également utiliser --socks5-hostnameau lieu de --socks5pour résoudre DNS sur le côté proxy.

Filipe Correia
la source
6
Cela n'a pas fonctionné pour moi, mais cela a fonctionné --socks5-hostname.
Michał Rybak
2
@ MichałRybak qui fonctionnera de la même façon mais résoudra le DNS du côté proxy. Voir la page de manuel pour plus de détails.
Filipe Correia
3
curl https://api.ipify.org --proxy socks5://189.100.246.182:37339semble bien fonctionner pour moi. L' --proxyoption est-elle en quelque sorte inférieure à l' --socks5utilisation de proxys socks5?
@ user993683 Cela dépend de la version. --proxyest probablement ce que vous voulez maintenant, mais il n'a pas toujours été pris en charge. Notez également que socks5://et socks5h://effectuez la résolution du nom d'hôte (DNS) avant et après la connexion au proxy, respectivement.
Michael - Où est Clay Shirky
51

comme ajout à airween, une autre bonne idée est d'ajouter ceci dans votre .bashrc, ainsi vous pourrez passer d'un environnement non proxy à un environnement proxy:

alias proxyon="export http_proxy='http://YOURPROXY:YOURPORT';export https_proxy='http://YOURPROXY:YOURPORT'"
alias proxyoff="export http_proxy='';export https_proxy=''"

O YOUR YOURPROXY: YOURPORT est exactement cela, votre proxy IP et port :-).

Ensuite, tout simplement

proxyon

votre système commencera à utiliser le proxy, et au contraire avec:

proxyoff
Alejandro Moreno
la source
34

utilisez le suivant

curl -I -x 192.168.X.X:XX http://google.com

192.168.X.X:XX mettez l'IP et le port de votre serveur proxy.

-v en mode verbeux, il donnera plus de détails, y compris les en-têtes et la réponse.

13krn
la source
2
Cela devrait être la réponse. Tout le monde ne veut pas spécifier une variable globale (exportation) pour chaque demande HTTP effectuée par chaque client HTTP sur votre hôte. Cette option donne plus de flexibilité, à mon humble avis.
ivanleoncz
C'est très utile lorsque vous essayez différents proxys contre une URL. Merci.
redAce
30

vous pouvez utiliser :

curl http://www.example.com --proxy http://125.119.175.48:8909

comme expliqué par Karl

smitkpatel
la source
26
"comme expliqué par Karl", ce qui signifie que cette réponse n'est pas meilleure qu'une copie de cette réponse.
Raedwald
26

J'aime l'utiliser pour obtenir l'adresse IP sous laquelle je suis vu

curl -x http://proxy_server:proxy_port https://api.ipify.org?format=json && echo

J'espère que cela aide quelqu'un.

bmetge
la source
19

Pour que curlvous puissiez configurer le proxy dans votre fichier ~/.curlrc( _curlrcsous Windows) en ajoutant de la proxyvaleur, la syntaxe est:

proxy = http://username:password@proxy-host:port
kenorb
la source
C'est ça! Configuré le paramètre proxy il y a quelques années dans ce fichier et se demandant aujourd'hui, pourquoi curl ne fonctionne plus maintenant l'adresse du proxy a changé et les vars env sont tous définis correctement. Merci pour ça!
emale
15

Résumant simplement toutes les bonnes réponses mentionnées:

curl -x http://<user>:<pass>@<proxyhost>:<port>/ -o <filename> -L <link>
M. Mashaye
la source
8

Avec un proxy avec authentification j'utilise:

curl -x <protocol>://<user>:<password>@<host>:<port> --proxy-anyauth <url>

parce que, je ne sais pas pourquoi curl n'utilise pas / attrape les variables d'environnement http [s] _proxy .

Pedro R. Sánchez A.
la source
6
C:\Desktop>curl --head https://www.google.com/ --proxy 1.1.1.1:8080
Debashish Saha
la source
6
Pensez à ajouter des explications à votre solution.
Pochmurnik
3

Vous n'avez pas besoin d'exporter la http[s]_proxyvariable shell si vous définissez simplement le proxy pour une commande unique. par exemple

http_proxy=http://your.proxy.server:port curl http://www.example.com

Cela dit, je préférerais curl -xsi je savais que j'allais toujours utiliser un proxy.

surpenser
la source
2

Selon votre lieu de travail, vous devrez peut-être également spécifier le -kou le--insecure option option pour curl afin de résoudre les problèmes potentiels passés avec les certificats d'autorité de certification.

curl -x <myCompanyProxy>:<port> -k -O -L <link to file to download>
Matt Legler
la source
1
sudo curl -x http://10.1.1.50:8080/ -fsSL https://download.docker.com/linux/ubuntu/gpg

Cela a parfaitement fonctionné pour moi, l'erreur vient du fait que curl doit définir le proxy

N'oubliez pas de remplacer le proxy par votre proxy, le mien, "exemple" était http://10.1.1.50:8080/ .

IbarMario
la source
0

Dans le cas où le proxy utilise un proxy automatique avec un fichier PAC. Nous pouvons trouver le proxy réel à partir du javascript de l'URL PAC.

Et si le proxy a besoin d'une authentification, nous pouvons d'abord utiliser un navigateur Web normal pour accéder au site Web qui favorisera la boîte de dialogue d'authentification. Après l'authentification, nous pouvons utiliser Wireshark pour capturer le package http envoyé au serveur proxy, à partir du package http, nous pouvons obtenir le jeton d'authentification à partir de l'en-tête http: Proxy-Authorization

Ensuite, nous pouvons définir la variable d'environnement http_proxy et également inclure le jeton d'authentification dans l'en-tête http: Proxy-Authorization

export http_proxy = http: // proxyserver: port

curl -H "Proxy-Authorization: xxxx" http: // targetURL

Jianwu Chen
la source