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?

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/

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.

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!


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.


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

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.


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


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.


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

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>

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 .



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.


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>

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/ .


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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.