Comment faire en sorte que curl ignore le proxy?

106

Comment faire en sorte que curl ignore le proxy? La configuration de $ NO_PROXY ne semble pas fonctionner pour moi.

ksuralta
la source
1
Cela aiderait les gens à vous répondre si vous fournissiez plus d'informations. Sur quelle plateforme êtes-vous? D'où curl obtient-il les paramètres de proxy? Quel protocole (HTTP, FTP)? Quel type de proxy (HTTP, SOCKS)? Est-ce un proxy transparent? Pouvez-vous afficher un ensemble exact de commandes qui présentent votre problème, ainsi que leur sortie?
Brian Campbell

Réponses:

55

Je suppose que curl lit l'adresse proxy de la variable d'environnement http_proxyet que la variable doit conserver sa valeur. Ensuite, dans un shell comme bash, export http_proxy='';avant qu'une commande (ou dans un script shell) ne change temporairement sa valeur.

(Voir le manuel de curl pour toutes les variables qu'il examine, sous l'en- ENVIRONMENTtête.)

Anonyme
la source
19
Ou simplementunset http_proxy
joelittlejohn
Une remarque: il existe d'autres variables d'env * _proxy comme ftp_proxy. Je pense, voici une liste complète wiki.archlinux.org/index.php/proxy_settings .
Dmitriusan
Si vous ne voulez pas remplacer le http_proxy au cas par cas, vous pouvez configurer les domaines à ignorer avec $ no_proxy, puis alias votre curl: alias curl = 'curl --noproxy $ no_proxy'
Sir4ur0n
1
@jdebon Cela ne fonctionne pas si vous avez un caractère générique dans cette variable d'environnement, pour les raisons décrites ci-dessous ( stackoverflow.com/a/17710829/2189128 ).
Jeff le
@Jeff Ce n'est pas mon cas, mais bel endroit, cela pourrait poser problème à d'autres personnes. Merci!
Sir4ur0n
247

Si votre curlest au moins une version 7.19.4, vous pouvez simplement utiliser l' --noproxyindicateur.

curl --noproxy "*" http://www.stackoverflow.com

Du manuel .

Scott Offen
la source
5
curl: option --noproxy: est inconnu
Roger Ng
2
@RogerNg, si le manuel ou l'utilisation a changé depuis que j'ai répondu à la question, n'hésitez pas à mettre à jour la réponse ou à rédiger la vôtre. Néanmoins, au moment de la rédaction de cet article, cette réponse était exacte pour la question posée. Si votre installation ne se comporte pas conformément aux spécifications, c'est un tout autre problème.
Scott Offen
3
curl --noproxy stackoverflow.com stackoverflow.com C'est la bonne recommandation.
arulraj.net
2
Je suppose que cette --noproxyoption n'est pas disponible pour les anciennes versions de curl (par exemple, celles qui sont utilisées chez Centos / RHEL 5.x)
Dmitriusan
2
Sur la base de la documentation, la seule façon avec laquelle cela aurait pu fonctionner --noproxy 127.0.0.1était si stackoverflow.com fonctionnait sur localhost.
dannysauer
72

J'ai rencontré le même problème car j'ai défini les variables d'environnement http_proxy et https_proxy. Mais parfois, je me connecte à un autre réseau et dois temporairement contourner le proxy. Le moyen le plus simple de le faire (sans changer les variables d'environnement) est:

curl --noproxy '*' stackoverflow.com

D'après le manuel: "Le seul caractère générique est un seul caractère *, qui correspond à tous les hôtes et désactive effectivement le proxy."

Le caractère * est entre guillemets afin qu'il ne soit pas développé par erreur par le shell.

wisbucky
la source
12
note pour les utilisateurs de furture: Bash étend les fichiers locaux si je ne cite pas le * socurl --noproxy "*" stackoverflow.com
Adam
Très utile et à noter que cela semble également ignorer le proxy (SOCKS) que j'ai défini dans mon fichier
.curlrc
1
C'est la réponse qui a fonctionné pour moi en utilisant la version 7.22.0 de curl
xpereta
23

Cela fonctionne très bien, définissez la chaîne proxy sur ""

curl -x "" http://www.stackoverflow.com
Ericcurtin
la source
12

Ajoutez vos préférences de proxy dans .curlrc

proxy = 1.2.3.4
noproxy = .dev,localhost,127.0.0.1

Cela oblige tous les domaines de développement et les requêtes de la machine locale à ignorer le proxy.

Clemens Tolboom
la source
1
//, C'est le seul qui montre un exemple avec une valeur avec une valeur DNS commençant par ..
Nathan Basanese
À ne pas confondre avec la variable env no_proxy (avec tiret bas)
Simon Perepelitsa
7

Long shot mais essayez de définir le proxy sur "" (chaîne vide) qui devrait remplacer tous les paramètres de proxy selon la page de manuel.

Louis
la source
2
Ce n'est pas un «long shot» - c'est la bonne façon de le faire. Selon la page de manuel de ma curl (7.15.5, qui n'affiche pas l'option '--noproxy'), -x / - proxy <proxyhost [: port]> ... Cette option remplace les variables d'environnement existantes qui définissent le proxy sur utilisation. S'il existe une variable d'environnement définissant un proxy, vous pouvez définir le proxy sur "" pour le remplacer.
Rob Cranfill
5
En '09, tout était loin.
Louis
5
+1, -x "" le fait. --noproxy avec joker ne fonctionne pas avec mon bash même si je cite le "*"
Eugene
@Eugene: Il fonctionne dans bash 4.3.11, et il doit être cité.
karatedog
6

Tout d'abord, j'ai répertorié le paramètre de proxy actuel avec

env | sort | less

(devrait être quelque chose comme http_proxy=http://wpad.local.machine.location:port number)

Puis j'ai essayé de régler

export http_proxy=";" 

qui a donné ce message d'erreur:

curl: (5) Couldn't resolve proxy ';'

A essayé

export http_proxy="" && curl http://servername:portnumber/destinationpath/ -d 55

et ça a marché!

PS! N'oubliez pas de remettre le proxy http à ses paramètres d'origine avec

export http_proxy=http://wpad.local.machine.location:port number
benettispaghetti
la source
6

J'ai http_proxyet je suis https_proxydéfini. Je ne veux pas désarmer et redéfinir ces environnements, mais cela --noproxy '*' fonctionne parfaitement pour moi.

curl --noproxy '*' -XGET 172.17.0.2:9200
{
  "status" : 200,
  "name" : "Medusa",
  "cluster_name" : "elasticsearch",
  "version" : {
    "number" : "1.5.0",
    "build_hash" : "544816042d40151d3ce4ba4f95399d7860dc2e92",
    "build_timestamp" : "2015-03-23T14:30:58Z",
    "build_snapshot" : false,
    "lucene_version" : "4.10.4"
  },
  "tagline" : "You Know, for Search"
}
prier
la source
1

Réponse boiteuse mais: N'oubliez pas de vous assurer qu'aucun proxy n'est défini dans un ~/.curlrcfichier (...).

jtlz2
la source
1
Merci. J'avais gratté la tête pourquoi curl ne respecte pas les vars env locaux. Et puis j'ai recherché le .curlrc et il y avait quelques configurations supplémentaires. Ajout de no_proxy et cela a fonctionné!
n3o le
1

Dans mon cas (macos, curl 7.54.0), j'ai ci-dessous un proxy défini avec~/.bash_profile

$ env |grep -i proxy |cut -d = -f1|sort
FTP_PROXY
HTTPS_PROXY
HTTP_PROXY
NO_PROXY
PROXY
ftp_proxy
http_proxy
https_proxy
no_proxy

Pour une raison inconnue, cette version de curlne peut pas fonctionner avec les variables d'environnement NO_PRXYet no_proxycorrectement, alors je désactive les variables d'environnement proxy une par une, jusqu'à ce que les deux HTTPS_PROXYet https_proxy.

unset HTTPS_PROXY
unset https_proxy

il commence à fonctionner et peut se connecter à des URL internes

Je recommanderais donc de désactiver toutes les variables proxy si vous avez dans votre environnement comme solution temporaire.

unset http_proxy https_proxy HTTP_PROXY HTTPS_PROXY
BMW
la source
-1

Mon curl n'ignorait pas le proxy sur Ubuntu 12.04 jusqu'à ce que je définisse la variable d'environnement "no_proxy" (minuscule). L'option --noproxy n'était pas disponible.

user2646026
la source