1
votes

La fonction Curl ne peut pas analyser le proxy provenant d'une variable dans bash

J'ai un fichier proxy txt au format:

102.129.249.120:3128
102.129.249.120:8080
101.4.136.34:8080
103.228.117.244:8080
103.253.27.108:80
104.45.188.43:3128
104.250.34.179:80
105.27.238.161:80
104.154.143.77:3128
110.243.20.2:9999
111.68.26.237:8080
106.104.151.142:58198
113.252.95.19:8197
115.231.31.130:80
118.69.50.154:80
118.69.50.154:443
119.81.189.194:80
119.81.189.194:8123
119.81.199.81:8123
119.81.199.83:8123
119.81.199.80:8123
12.139.101.100:80
12.139.101.101:80
119.81.199.85:31288
119.81.199.86:8123
119.81.199.87:8123
12.139.101.102:80
124.156.98.172:443
13.228.91.252:3128
138.197.157.32:3128
138.197.157.32:8080
138.68.240.218:8080
138.68.240.218:3128
138.68.60.8:8080
138.68.60.8:3128

et j'essaie de créer un script bash qui fera (par exemple): curl -x "$ IP "google.com .
Malheureusement, curl me donne une syntaxe de proxy non prise en charge pour tous les proxies.
Des idées?
BTW, je doute vraiment que cette question ait été répétée car j'ai essayé tout le reste en vain.

Mon script:

Number=$(wc -l < ProxyList.txt)



for ((i=1;i<=$Number;++i))  do
ip=$(head -n ${i} ProxyList.txt | tail -n +${i})
curl -p -x "$ip" 'webpage' -H 'user-agent' -H 'Accept: */*' -H 'Accept-Language: en-US,en;q=0.5' --compressed -H 'DNT: 1' -H 'Connection: keep-alive' -H 'Cookie: wpml_referer_url=referer; _icl_current_language=es; PHPSESSID=tpikve1vl4ued06i082vprqdo1' -H 'If-Modified-Since: Mon, 16 May 2016 07:27:13 GMT' -H 'If-None-Match: "3d6-532f08d9d7640-gzip"' -H 'Cache-Control: max-age=0' -m 6
done

Un petit échantillon de mon liste de proxy:

102.129.249.120:3128
102.129.249.120:8080
101.4.136.34:8080
103.228.117.244:8080
etc


6 commentaires

@oguzismail Terminé


J'utiliserais des xargs, comme xargs -I {} curl -x {} ... . Mais si ProxyList.txt a des fins de ligne DOS, il échouerait non plus


Pourriez-vous donner un exemple?


comment utiliser xargs j'ai essayé echo $ ip | xargs curl url et cela ne fonctionnait toujours pas. Même erreur.


Quelle est l'erreur que vous obtenez? Il vous manque également un point-virgule juste avant le do de votre boucle for .


@tectux Désolé, c'était une erreur de formatage. J'avais un espace. Erreur: 'url: (5) Syntaxe de proxy non prise en charge dans' 207.154.231.213:8080


3 Réponses :


1
votes

essayez ceci:

export http_proxy=http://1.2.3.4:3128/
export https_proxy=http://1.2.3.4:3128/

mais le problème avec curl pourrait être, cela devrait définir les variables d'environnement http_proxy et https_proxy comme ceci :

for ip in $(cat ProxyList.txt)
do
   curl -p -x "$ip" 'webpage' -H 'user-agent' -H 'Accept: */*' -H 'Accept-Language: en-US,en;q=0.5' --compressed -H 'DNT: 1' -H 'Connection: keep-alive' -H 'Cookie: wpml_referer_url=referer; _icl_current_language=es; PHPSESSID=tpikve1vl4ued06i082vprqdo1' -H 'If-Modified-Since: Mon, 16 May 2016 07:27:13 GMT' -H 'If-None-Match: "3d6-532f08d9d7640-gzip"' -H 'Cache-Control: max-age=0' -m 6
done


11 commentaires

Même erreur ... J'utilise ubuntu 20.04 est-ce que cela pourrait être le problème?


'url: (5) Syntaxe de proxy non prise en charge dans' 105.29.64.222:80


veuillez donner https://stackoverflow.com/questions/9445489/performing-http- ‌ demandes-avec-curl-u‌ sing-proxy un essai


commencez par définir les variables d'environnement proxy, puis appelez curl http://www.google.com etc.


Oui. Cela ne fonctionne que si je saisis l'ip sans la variable (manuellement)


quelle est la sortie de pour ip dans $ (cat ProxyList.txt); do echo "- $ ip -"; done ?


Cela fonctionne, j'ai essayé cela aussi, il affiche la liste de proxy comme d'habitude!


@Oliver Gaida, j'ai vu les variables d'environnement http_proxy / https_proxy fonctionner avec wget , mais à ma connaissance cela ne fonctionne pas avec curl .


J'ai essayé ça avec curl et ça "marche" (au moins ça me donne la même erreur ...)


Cela a été résolu mais merci! Et non je ne le sais pas


C'est l'outil avec unix2dos pour changer les fins de ligne entre dos et unix.



0
votes

Selon la page de manuel curl, le commutateur -x (ou --proxy) peut être préfixé avec le protocole devant l'argument (s'il est omis, je suppose qu'il est par défaut http: //):
-x, --proxy [protocole: //] hôte [: port]

Un simple script bash avec xargs ressemblerait à:

#!/bin/bash
webpage=${1:-http://google.com}
cat ProxyList.txt \
| xargs -n1 -I{} curl -p -x http://{} "$webpage" -H 'user-agent' -H 'Accept: */*' -H 'Accept-Language: en-US,en;q=0.5' --compressed -H 'DNT: 1' -H 'Connection: keep-alive' -H 'Cookie: wpml_referer_url=referer; _icl_current_language=es; PHPSESSID=tpikve1vl4ued06i082vprqdo1' -H 'If-Modified-Since: Mon, 16 May 2016 07:27:13 GMT' -H 'If-None-Match: "3d6-532f08d9d7640-gzip"' -H 'Cache-Control: max-age=0' -m 6


4 commentaires

Pas encore ??? Même erreur. Quelle version d'ubuntu avez-vous? Ou avez-vous une autre distribution ?? Je ne sais vraiment pas.


'url: (5) Syntaxe de proxy non prise en charge dans' 46.35.184.187:61003


Debian 5.4.19 / curl 7.68.0


Je reçois "curl: (56) Code HTTP 400 reçu du proxy après CONNECT" de vos proxys. Cela semble être lié à votre commutateur "-p" (tunneling). Semble que les procurations ne prennent pas en charge cela? D'autre part, cela montre que la partie "-x" des instructions fonctionne.



3
votes

Votre fichier d'entrée contient des caractères de retour chariot à la fin de chaque ligne.
Chaque ligne de votre fichier d'entrée se termine par \ r \ n au lieu de simplement \ n .

Vous pouvez vérifier avec od : p>

while read proxy; do
  curl -p -x $proxy $webpage
done < <( tr -d '\r' < ProxyList.txt )

Donc, dans votre script, $ ip a en fait une valeur de 102.129.249.120:3128\r . p>

Vous pouvez supprimer les caractères \ r avec tr par exemple:

$ head -1 ProxyList.txt | od -c
0000000   1   0   2   .   1   2   9   .   2   4   9   .   1   2   0   :
0000020   3   1   2   8  \r  \n
0000026


0 commentaires