Функция Curl не может анализировать прокси, поступающий из переменной в bash - PullRequest
1 голос
/ 16 июня 2020

У меня есть txt-файл прокси в формате:

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

, и я пытаюсь создать сценарий bash, который будет работать (например): curl -x "$IP" google.com.
К сожалению, curl дает мне неподдерживаемый синтаксис прокси для всех прокси.
Есть идеи?
Кстати, я действительно сомневаюсь, что этот вопрос повторялся, поскольку все остальное я пробовал безрезультатно.

Мой сценарий :

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

Небольшой образец моего списка прокси:

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

Ответы [ 3 ]

3 голосов
/ 17 июня 2020

В конце каждой строки вашего входного файла есть символы возврата каретки.
Каждая строка в вашем входном файле заканчивается \r\n вместо \n.

Вы можете проверить с помощью od:

$ 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

Итак, в вашем скрипте $ip фактически имеет значение 102.129.249.120:3128\r.

Вы можете удалить символы \r с помощью tr, например:

while read proxy; do
  curl -p -x $proxy $webpage
done < <( tr -d '\r' < ProxyList.txt )
1 голос
/ 16 июня 2020

попробуйте следующее:

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

, но проблема с curl может заключаться в том, что переменные среды http_proxy и https_proxy должны быть установлены следующим образом:

export http_proxy=http://1.2.3.4:3128/
export https_proxy=http://1.2.3.4:3128/
0 голосов
/ 16 июня 2020

Согласно справочной странице curl, переключатель -x (или --proxy) может иметь префикс протокола перед аргументом (если он опущен, я предполагаю, что по умолчанию используется http: //): -x, --proxy [protocol://]host[:port] Простой сценарий bash с xargs будет выглядеть так:

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