purebasic.info

PureBasic forum
Текущее время: Пт июл 10, 2020 10:09 am

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 13 ] 
Автор Сообщение
СообщениеДобавлено: Пн ноя 26, 2012 10:21 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Пт янв 27, 2012 7:12 pm
Сообщений: 894
Откуда: Кустанай
Благодарил (а): 27 раз.
Поблагодарили: 13 раз.
Пункты репутации: 7
Мне для парсера нужен встроеный прокси чекер, сегодня целый день писал, вот что получилось, отдаю на суд общественности, ну и надеюсь, что кому нить пригодится

_______________________
Исправил недочёт при редактирование результатов.
Добавил возможность передачи в параметрах, файла на прокси лист, после чека, данные будут записаны в этот же файл, старые данные будут удалены.


Вложения:
Комментарий к файлу: прокси чекер
ProxyChecker.rar [186.34 KiB]
Скачиваний: 323

_________________
Детям нельзя в интернет. От детей интернет тупеет.


Последний раз редактировалось m0t0d0r Вт ноя 27, 2012 12:57 pm, всего редактировалось 2 раз(а).
Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн ноя 26, 2012 10:49 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Чт июн 25, 2009 1:02 pm
Сообщений: 2328
Откуда: Russia — Belarus
Благодарил (а): 7 раз.
Поблагодарили: 75 раз.
Пункты репутации: 11
А почему парсишь именно через Proxy?

_________________
EnableExplicit User


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн ноя 26, 2012 10:54 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Пт янв 27, 2012 7:12 pm
Сообщений: 894
Откуда: Кустанай
Благодарил (а): 27 раз.
Поблагодарили: 13 раз.
Пункты репутации: 7
qpAHToMAS писал(а):
А почему парсишь именно через Proxy?


нетолько, просто уважающий себя парсер, обязан иметь поддержку работы через прокси, вот я и решил добавить, а чекер, как дополнительный инструмент.

Да и как ещё парсить, если надо быстро, много и без бана, датацентры палятся на ура, свой ип через пару минут даже антикапчёй неотмоешь, остаются только прокси, хотя может я чего то не знаю

_________________
Детям нельзя в интернет. От детей интернет тупеет.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн ноя 26, 2012 11:09 pm 
Не в сети
профессор

Зарегистрирован: Вс июн 10, 2012 8:18 am
Сообщений: 1294
Благодарил (а): 60 раз.
Поблагодарили: 49 раз.
Пункты репутации: 14
А зачем принудительно убивать поток, если есть WaitThread? К тому же KillThread не очищает память, а это приводит к ее утечке. С 5-10к проксей будет очень заметно.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн ноя 26, 2012 11:18 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Пт янв 27, 2012 7:12 pm
Сообщений: 894
Откуда: Кустанай
Благодарил (а): 27 раз.
Поблагодарили: 13 раз.
Пункты репутации: 7
MrF писал(а):
А зачем принудительно убивать поток, если есть WaitThread? К тому же KillThread не очищает память, а это приводит к ее утечке. С 5-10к проксей будет очень заметно.

Ну например у меня было так, что больше 5ти мин не отвечал поток, если ждать, то это ХЗ, если игнорить и идти дальше, это ещё хуже, когда он очухается, то начнёт обращаться к несуществующим гаджетам и создавать уже удалённые файлы, ставить на паузу и идти дальше, тоже самое что и убить, память не освобадится, короче если не надо, чтоб ресурсы захламлялись, то ставить таймаут минуты на 3-6, всё будет ОК

_________________
Детям нельзя в интернет. От детей интернет тупеет.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн ноя 26, 2012 11:40 pm 
Не в сети
профессор

Зарегистрирован: Вс июн 10, 2012 8:18 am
Сообщений: 1294
Благодарил (а): 60 раз.
Поблагодарили: 49 раз.
Пункты репутации: 14
Я же тебе не зря про WaitThread сказал. Там есть свой таймаут с безопасным завершением.

m0t0d0r писал(а):
короче если не надо, чтоб ресурсы захламлялись, то ставить таймаут минуты на 3-6, всё будет ОК

Также и будет, память-то никто же не очистит.

И чекать прокси лучше через специальные страницы, например, anonymity.freeproxy.ru/check.php
2кб против 90кб гугловских - существенная разница.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт ноя 27, 2012 9:27 am 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Пт янв 27, 2012 7:12 pm
Сообщений: 894
Откуда: Кустанай
Благодарил (а): 27 раз.
Поблагодарили: 13 раз.
Пункты репутации: 7
MrF писал(а):
Я же тебе не зря про WaitThread сказал. Там есть свой таймаут с безопасным завершением.

m0t0d0r писал(а):
короче если не надо, чтоб ресурсы захламлялись, то ставить таймаут минуты на 3-6, всё будет ОК

Также и будет, память-то никто же не очистит.

И чекать прокси лучше через специальные страницы, например, anonymity.freeproxy.ru/check.php
2кб против 90кб гугловских - существенная разница.


да надо попробовать WaitThread, может я из справки что то не понял

большинство таких страниц палят прокси лист и черз час он уже не актуален, а искать чесные, дело долгое и много листов понадобится

Код:
1
2
3
4
5
6
7
8
Procedure th(val)
  Delay(10000)
EndProcedure
th_1 = CreateThread(@th(), 1)
If IsThread(th_1)<>0
  WaitThread(th_1, 1)
  Debug IsThread(th_1)
EndIf


Не прекращает эта функция поток и не для этого походу она

_________________
Детям нельзя в интернет. От детей интернет тупеет.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт ноя 27, 2012 10:19 am 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11707
Благодарил (а): 4 раз.
Поблагодарили: 512 раз.
m0t0d0r писал(а):
не для этого походу она
Она ожидает завершения потока. http://purebasic.ru/manual.php?id=1324&lng=rus
Сначала нужно сообщить потоку что он должен завершиться, а потом уже использовать эту функцию.

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт ноя 27, 2012 10:25 am 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Пт янв 27, 2012 7:12 pm
Сообщений: 894
Откуда: Кустанай
Благодарил (а): 27 раз.
Поблагодарили: 13 раз.
Пункты репутации: 7
Пётр писал(а):
m0t0d0r писал(а):
не для этого походу она
Она ожидает завершения потока. http://purebasic.ru/manual.php?id=1324&lng=rus
Сначала нужно сообщить потоку что он должен завершиться, а потом уже использовать эту функцию.

так речь о том, что поток завис на стадие соединения(коннекта) к серву, через прокси, в остальных местах ему зависать негде, там некак не сообщить, ну по крайней мере я способ не нашёл, вот и встаёт вопрос, валить такие потоки, или что с ними делать, потому что ждать отклика иногда приходится по 5, а может и более минут, я сам больше 5 минут не наблюдал, это был фотохостинг, не помню какой, вот он не отвечал так долго.

_________________
Детям нельзя в интернет. От детей интернет тупеет.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт ноя 27, 2012 4:14 pm 
Не в сети
профессор

Зарегистрирован: Вс июн 10, 2012 8:18 am
Сообщений: 1294
Благодарил (а): 60 раз.
Поблагодарили: 49 раз.
Пункты репутации: 14
Пётр писал(а):
Сначала нужно сообщить потоку что он должен завершиться, а потом уже использовать эту функцию.

С таймаутом этого не надо.

Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Procedure PrintStuff(*Interval)
  Debug " 1 trd"
    For i = 0 To 10
      PrintN(".")
      Delay(*Interval)
    Next
  EndProcedure
 
  If OpenConsole()
    Debug "start 1 trd"
    thread = CreateThread(@PrintStuff(), 1000)
     Debug "start "+ Str(thread)+" trd"
    If thread
      WaitThread(thread )
        PrintN("A")
        Delay(1000)
    EndIf
  EndIf



Если в этом примере в WaitThread добавить таймаут в 100мс, то программа не будет отсчитывать 10 итераций в потоке и завершится после первой.

m0t0d0r писал(а):
что поток завис на стадие соединения(коннекта) к серву

Так добавь таймаут в HttpGetPage, по истечению которого будет происходить InternetCloseHandle_


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт ноя 27, 2012 4:26 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Пт янв 27, 2012 7:12 pm
Сообщений: 894
Откуда: Кустанай
Благодарил (а): 27 раз.
Поблагодарили: 13 раз.
Пункты репутации: 7
Цитата:
Если в этом примере в WaitThread добавить таймаут в 100мс, то программа не будет отсчитывать 10 итераций в потоке и завершится после первой.

m0t0d0r писал(а):
что поток завис на стадие соединения(коннекта) к серву

Так добавь таймаут в HttpGetPage, по истечению которого будет происходить InternetCloseHandle_


Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Procedure PrintStuff(*Interval) 
   Debug " 1 trd"
     For i = 0 To 10
       PrintN(".")
       Delay(*Interval)
     Next
   EndProcedure
   
   If OpenConsole()
     Debug "start 1 trd"
     thread = CreateThread(@PrintStuff(), 1000)
      Debug "start "+ Str(thread)+" trd"
     If thread
       WaitThread(thread, 100)
       Delay(100);так просто
       Debug IsThread(thread)
       Delay (10000)
         PrintN("A")
         Delay(1000)
     EndIf
   EndIf



не пашет твой пример, поток работает дальше, он не завершился, ресурсы не освобадились, просто сразу этого не видно, так как прога завершалась, а в моём примере точки идут дальше

_________________
Детям нельзя в интернет. От детей интернет тупеет.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт ноя 27, 2012 5:49 pm 
Не в сети
профессор

Зарегистрирован: Вс июн 10, 2012 8:18 am
Сообщений: 1294
Благодарил (а): 60 раз.
Поблагодарили: 49 раз.
Пункты репутации: 14
Точно. Прошу прощенья, это я все перепутал и какую-то чушь написал :)


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Ср сен 18, 2019 10:28 pm 
Не в сети
док

Зарегистрирован: Сб май 28, 2011 6:55 pm
Сообщений: 176
Благодарил (а): 19 раз.
Поблагодарили: 0 раз.
Пытаюсь написать прокси чекер, по сути научиться работать с потоками.

Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
 
 
Global  NewList CheckedProxy.s()
Global MtxVar = CreateMutex()
 
InitNetwork()
 
Procedure.s SendHTTPData(Map headers$(), url.s, Proxy.s, TypeMethod.s, BodySend.s, ResponseHeaders.l,NoRedirest.l, GetResponseCode.l)
  ;Debug SendHTTPData(Header$(), "https://ipv4-internet.yandex.net/", "", "get", "", 0,0, 0);
 
  If Not Proxy =""
    HTTPProxy(Proxy)
  EndIf
 
  If TypeMethod = "get"
    Type = #PB_HTTP_Get
  EndIf                    
 
 
 
  If ResponseHeaders = 1  
    Response$ = GetHTTPHeader(url,HTTP_NoRedirect,headers$())    
 
  EndIf
 
  ProcedureReturn Response$
 
EndProcedure
 
 
 
 
Procedure TreadCheckProxy(*str_mem)
     Protected  NewMap Header$(),  bodyPage.s
   
Header$("User-Agent:") = "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:69.0) Gecko/20100101 Firefox/69.0"
Header$("Accept:") = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
Header$("Accept-Language:") = "en-US;q=0.5,en;q=0.3"
Header$("Connection:") = "keep-alive"
Header$("Upgrade-Insecure-Requests:") = "1"
 
  str_proxy.s= PeekS(*str_mem)
 
  If str_proxy.s=""
    ProcedureReturn 0
  EndIf
 
  bodyPage.s = SendHTTPData(Header$(), "https://yandex.ru/internet/", "socks5://"+str_proxy, "get", "", 1,0, 0)
 
      If Not bodyPage = ""
 
           LockMutex(MtxVar) ; поток занял мьютекс
   
          AddElement(CheckedProxy())
          CheckedProxy()=str_proxy
          Debug  "add Proxy "+str_proxy
   
    UnlockMutex(MtxVar) ;
        EndIf
 
EndProcedure
 
 
Procedure.s CheckProxyList(File.s,FileTo.s)
  Protected str_pr.s
  thread = 400
  num_threads = thread
  threads_timelimit = 15
  Dim threads(thread, 2)
 
  If ReadFile(0,File.s)
    If OpenFile(1,FileTo,#PB_File_Append)
      While Eof(0) = 0
        str_pr.s = ReadString(0)
          str_pr.s = RemoveString(str_pr.s, #CR$)
          str_pr.s = RemoveString(str_pr.s, #LF$)
              If Not str_pr.s =""
                *MemoireID = AllocateMemory(5000)
  If *MemoireID
    PokeS(*MemoireID, str_pr.s)
      EndIf        
          EndIf    
           stoped = 0
      Repeat
     For a=0 To num_threads-1
          If IsThread(threads(a,0)) = 0
         
         
            threads(a,0) = CreateThread(@TreadCheckProxy(), *MemoireID)
           
          str_pr.s=""
           threads(a,1) = Date()
            stoped = 1
            Break
       
       
      ElseIf Date()-threads(a,1) >= threads_timelimit
       
         
            KillThread(threads(a,0))
            threads(a,1) = 0
            threads(a,0) = CreateThread(@TreadCheckProxy(),*MemoireID)
         
            threads(a,1) = Date()
            stoped = 1
            Break
          EndIf
     
       
        Next a
        Delay(100)
      Until stoped = 1
     
     
    Wend
   
     Repeat
      stoped = 1
      For a=0 To num_threads-1
        If IsThread(threads(a,0)) <> 0 And Date()-threads(a,1) < threads_timelimit
          stoped = 0
          Break
        ElseIf threads(a,1)<>0 And Date()-threads(a,1) >= threads_timelimit And IsThread(threads(a,0))<>0
          KillThread(threads(a,0))
          threads(a,1) = 0
          stoped = 0
          Break
        EndIf
      Next a
      Delay(100)
    Until stoped = 1
       
 
   ForEach CheckedProxy()
     Debug CheckedProxy()
      WriteStringN(1,CheckedProxy())
  Next
 
CloseFile(1)
EndIf
CloseFile(0)
    EndIf
  EndProcedure  
 
 
 
  CheckProxyList("List.txt","ListChecked.txt")
 



При увеличение количества потоков, искажается результат, даже в 100 потоках не работает корректно, при 10 потоках результат в два - три раза больше.
Как победить ?
Прокси для сервера брал здесь https://www.proxy-list.download/SOCKS5

И ещё вопрос, есть ли способ определить какой прокси будет использоваться( http/socks5(5)....) до команды HTTPProxy( ?
Или может есть более универсальный способ использования прокси, имеется введу что бы можно было не указывать заголовков hhtp/socks?


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 13 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group (блог о phpBB)
Сборка создана CMSart Studio
Русская поддержка phpBB