purebasic.info

PureBasic forum
Текущее время: Ср дек 19, 2018 9:04 am

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




Начать новую тему Ответить на тему  [ Сообщений: 26 ]  На страницу Пред.  1, 2
Автор Сообщение
 Заголовок сообщения: Re: https file download
СообщениеДобавлено: Вт дек 26, 2017 9:35 am 
Не в сети
доцент
Аватар пользователя

Зарегистрирован: Вт апр 16, 2013 2:00 pm
Сообщений: 51
Откуда: Волгодонск
Благодарил (а): 3 раз.
Поблагодарили: 3 раз.
Пункты репутации: 5
Если вдруг кому-то будет интересно.
В системе прописан прокси с авторизацией. Если я через какие-то программы ещё попадаю в интернет, вводя логин и пароль, то система моя - нет.
Поэтому и была такая ерунда - всё вроде доступно, пингуется, а выходит ошибка проверки сертификата в списке отозванных,
а через средства PureBasic для скачивания очевидно необходимо, чтобы и системные службы могли нормально работать.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: https file download
СообщениеДобавлено: Вс янв 07, 2018 2:27 pm 
Не в сети
профессор

Зарегистрирован: Пт фев 20, 2009 12:57 pm
Сообщений: 1717
Откуда: Алматы
Благодарил (а): 16 раз.
Поблагодарили: 47 раз.
Пункты репутации: 5
а как быть в тяжелом случае? :) https://www.indiegala.com/ тут причем не ясно. ведь надо по идее дописать название файла https://www.indiegala.com/index.php например, или index.htm, или index.html - все три варианта 404. как в подобном случае выкрутится? без точного указания видимо не работает. уже и юзер агент подменял. и через #PB_HTTP_Asynchronous пробывал и с #PB_HTTP_Asynchronous. 5.60 версия.

Код:
1
2
3
4
5
6
7
8
9
10
  InitNetwork()
 
  *Buffer = ReceiveHTTPMemory("https://www.indiegala.com", 0, "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36")
  If *Buffer
    Size = MemorySize(*Buffer)
    Debug "Content: " + PeekS(*Buffer, Size, #PB_UTF8|#PB_ByteLength)
    FreeMemory(*Buffer)
  Else
    Debug "Failed"
  EndIf



Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: https file download
СообщениеДобавлено: Вс янв 07, 2018 3:25 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Чт июн 25, 2009 1:02 pm
Сообщений: 2295
Откуда: Russia — Belarus
Благодарил (а): 7 раз.
Поблагодарили: 72 раз.
Пункты репутации: 11
Incapsula стоит:
https://en.wikipedia.org/wiki/Incapsula
Которая защищает от роботов и всего такого.

_________________
EnableExplicit User


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: https file download
СообщениеДобавлено: Вт апр 03, 2018 7:48 pm 
Не в сети
профессор

Зарегистрирован: Сб фев 06, 2016 6:18 pm
Сообщений: 273
Благодарил (а): 14 раз.
Поблагодарили: 32 раз.
Пункты репутации: 0
Сразу признаюсь Help читал и не раз. Но как работать с HTTPProxy так и не понял.
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
InitNetwork()
;http://spys.one/proxys/RU/
;11 79.175.15.38:3128   HTTP    HIA     0.488   RU Казань 38.15.175.79kazan.ptl.ru (Quantum CJSC)
HTTPProxy("http://79.175.15.38")
 
*Buffer = ReceiveHTTPMemory("https://whoer.net/ru")
If *Buffer
  Size = MemorySize(*Buffer)
  buff.s = PeekS(*Buffer, Size, #PB_UTF8|#PB_ByteLength)
  FreeMemory(*Buffer)
Else
  Debug "Failed"
EndIf
 
If buff
  start.l = FindString(buff, "Скопировать в буфер обмена") + 28
  stop.l = FindString(buff, "<", start)
  len.b = stop - start
  Debug Mid(buff, start, len)
EndIf


Должно ли в данном случае вернуть адрес прокси "79.175.15.38" ? Всегда получаю Failed, если прописать в браузере, то работает (с браузера, прокси живой).


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: https file download
СообщениеДобавлено: Вт апр 03, 2018 9:17 pm 
Не в сети
док
Аватар пользователя

Зарегистрирован: Сб мар 28, 2015 11:06 pm
Сообщений: 159
Откуда: Україна
Благодарил (а): 11 раз.
Поблагодарили: 11 раз.
Пункты репутации: 4
1. Чёт не нравится этой проксе как пурик авторизируется и отвечает ему 407 Unauthorized
2. порт тож надо указывать, на HTTPProxy("http://159.65.110.167:3128") - работает


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: https file download
СообщениеДобавлено: Вт апр 03, 2018 9:40 pm 
Не в сети
профессор

Зарегистрирован: Сб фев 06, 2016 6:18 pm
Сообщений: 273
Благодарил (а): 14 раз.
Поблагодарили: 32 раз.
Пункты репутации: 0
LinXP, спасибо.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: https file download
СообщениеДобавлено: Пт окт 05, 2018 10:37 pm 
Не в сети
доцент
Аватар пользователя

Зарегистрирован: Вт апр 16, 2013 2:00 pm
Сообщений: 51
Откуда: Волгодонск
Благодарил (а): 3 раз.
Поблагодарили: 3 раз.
Пункты репутации: 5
Новая серия. Другой нужный мне сайт переехал на https.

Там нюанс, первая страница генерит уникальную ссылку на скрипт, который возвращает JSON.
И чтобы получить его нужно обязательно указать referer.

Штатный ReceiveHTTPMemory не имеет такой возможности (зато есть ненужный user-agent), поэтому я перебрался на SendNetworkData(), ReceiveNetworkData() и так далее, там можно вручную сформировать GET запрос c любыми полями.

И вот, сюрприз, теперь у нас https и, как я понял из реплик на инофорумах, мой текущий вариант не канает, потому что still not implemented.

Альтернативу предлагают wininet или libcurl.

Я что-то кинулся за wininet, но там непонятные мне ошибки лезут и осложнено всё тем, что ряд файлов надо скачать в рамках одного соединения, чтобы не генерились новые уникальные ссылки... Сложно всё.
Может кто-то посоветует другие варианты? Libcurl ещё не пробовал, но подозреваю там будет не менее тяжко.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: https file download
СообщениеДобавлено: Пт окт 05, 2018 11:10 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11336
Благодарил (а): 4 раз.
Поблагодарили: 443 раз.
https://www.purebasic.fr/english/viewto ... 12&t=42064

В 5.70 появились функции HTTPRequest() и HTTPRequestMemory(). https://www.purebasic.fr/english/viewto ... 65#p527365
В них есть возможность задать заголовок.

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


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: https file download
СообщениеДобавлено: Сб окт 06, 2018 3:26 am 
Не в сети
док
Аватар пользователя

Зарегистрирован: Сб мар 28, 2015 11:06 pm
Сообщений: 159
Откуда: Україна
Благодарил (а): 11 раз.
Поблагодарили: 11 раз.
Пункты репутации: 4
doremi, 5.70 не скоро зарелизится, пока использую такое... вроде прокси тут не работает, не помню..
Код:
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
149
150
151
152
153
154
155
156
157
158
#INTERNET_DEFAULT_HTTP_PORT  = 80
#INTERNET_DEFAULT_HTTPS_PORT = 443
 
#INTERNET_OPEN_TYPE_DIRECT = 1
#INTERNET_OPEN_TYPE_PROXY  = 3
 
#INTERNET_SERVICE_HTTP = 3
 
#INTERNET_FLAG_PRAGMA_NOCACHE =           $00000100
#INTERNET_FLAG_IGNORE_CERT_CN_INVALID =   $00001000
#INTERNET_FLAG_IGNORE_CERT_DATE_INVALID = $00002000
#INTERNET_FLAG_NO_COOKIES =               $00080000
#INTERNET_FLAG_NO_AUTO_REDIRECT =         $00200000
#INTERNET_FLAG_SECURE =                   $00800000
#INTERNET_FLAG_DONT_CACHE =               $04000000
 
#HTTP_ADDREQ_FLAG_ADD =     $20000000
#HTTP_ADDREQ_FLAG_REPLACE = $80000000
 
#ERROR_INTERNET_INVALID_CA = 12045
 
#INTERNET_OPTION_SECURITY_FLAGS = 31
 
#SECURITY_FLAG_IGNORE_UNKNOWN_CA = $00000100
 
Structure Pure_HTTP
  fullurl.s               ; "http://translate.baidu.com/transcontent?monLang=en"
  post_data.s             ; "ie=utf-8&source=txt&query=Hello%20World&from=en&to=jp"  (only for POST)
  post_data_charset.l     ; #PB_Unicode
  post_data_content_type.s; "Content-Type: text/html; charset=utf-8"
  cookie.s                ; "caltat=604255e95d374037942e666b1f717286"
  user_agent.s            ; "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)"
  referer.s               ; "http://translate.baidu.com"
  proxy.s                 ;
  timeout.l               ; 5000  (Default 1000)
  redirect.i              ; #True (Default #False)
  UserName.s              ; UserName (Default NULL)
  Password.s              ; Password (Default NULL)
EndStructure
 
Procedure.s StringToUTF(String.s)
  #AutoLength=-1
  Protected buffer.s
  buffer=Space(StringByteLength(String,#PB_UTF8))
  PokeS(@buffer,String,#AutoLength,#PB_UTF8)
 
  ProcedureReturn buffer
EndProcedure
 
Procedure.s do_request(*Pure_HTTP.Pure_HTTP)
  Protected.l flags, bytes_read, dwFlags, dwBuffLen
  Protected.i is_secure, open_handle, port, connect_handle, request_handle, send_handle, Ok, access_type, LastError
  Protected.s host, page, verb, headers, buffer, result, Size.l, sBuffer.s, Ret.l
 
  If *Pure_HTTP\timeout     = 0  : *Pure_HTTP\timeout       = 1000  : EndIf
  If *Pure_HTTP\user_agent  = "" : *Pure_HTTP\user_agent    = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)" : EndIf
  If *Pure_HTTP\post_data_content_type  = "" : *Pure_HTTP\post_data_content_type    = "Content-Type: text/html; charset=utf-8" : EndIf
  If *Pure_HTTP\proxy       = "" : access_type              =  #INTERNET_OPEN_TYPE_DIRECT : Else : access_type = #INTERNET_OPEN_TYPE_PROXY : EndIf
 
  host = GetURLPart(*Pure_HTTP\fullurl, #PB_URL_Site)
  page = GetURLPart(*Pure_HTTP\fullurl, #PB_URL_Path)
 
  If GetURLPart(*Pure_HTTP\fullurl, #PB_URL_Parameters) = "" : Debug "---" : Else : page + "?" +GetURLPart(*Pure_HTTP\fullurl, #PB_URL_Parameters): EndIf
  If GetURLPart(*Pure_HTTP\fullurl, #PB_URL_Protocol) = "http"  : is_secure.i=#False : EndIf
  If GetURLPart(*Pure_HTTP\fullurl, #PB_URL_Protocol) = "https" : is_secure.i=#True  : EndIf
 
  open_handle = InternetOpen_(*Pure_HTTP\user_agent, access_type, "", "", 0)
 
  InternetSetOption_(open_handle, 2, *Pure_HTTP\timeout, 4)
 
  flags = #INTERNET_FLAG_PRAGMA_NOCACHE
  flags | #INTERNET_FLAG_NO_COOKIES
  flags | #INTERNET_FLAG_DONT_CACHE
 
  If is_secure
    port  = #INTERNET_DEFAULT_HTTPS_PORT
   
    flags | #INTERNET_FLAG_SECURE
    flags | #INTERNET_FLAG_IGNORE_CERT_CN_INVALID
    flags | #INTERNET_FLAG_IGNORE_CERT_DATE_INVALID
  Else
    port  = #INTERNET_DEFAULT_HTTP_PORT
  EndIf
  Debug "Connect to: " + host
  connect_handle = InternetConnect_(open_handle, host, port, *Pure_HTTP\UserName, *Pure_HTTP\Password, #INTERNET_SERVICE_HTTP, 0, 0)
 
 
  If Not *Pure_HTTP\redirect : flags | #INTERNET_FLAG_NO_AUTO_REDIRECT : EndIf
  If *Pure_HTTP\post_data = "" : verb = "GET" : Else : verb = "POST" : EndIf
  If page = "" : page = "/" : EndIf
  request_handle = HttpOpenRequest_(connect_handle, verb, page, "", *Pure_HTTP\referer, #Null, flags, 0)
  If verb = "POST"
    headers = *Pure_HTTP\post_data_content_type + #CRLF$
    headers +  "Accept-Charset: utf-8" + #CRLF$
    HttpAddRequestHeaders_(request_handle, headers, Len(headers), #HTTP_ADDREQ_FLAG_ADD | #HTTP_ADDREQ_FLAG_REPLACE)
  EndIf
 
  If *Pure_HTTP\cookie <> ""
    headers = "Cookie: "+ *Pure_HTTP\cookie + #CRLF$
    HttpAddRequestHeaders_(request_handle, headers, Len(headers), #HTTP_ADDREQ_FLAG_ADD | #HTTP_ADDREQ_FLAG_REPLACE)
  EndIf
 
  Ok = 0
  Repeat
    send_handle = HttpSendRequest_(request_handle, #Null, 0, StringToUTF(*Pure_HTTP\post_data), StringByteLength(*Pure_HTTP\post_data, #PB_UTF8))
   
    If send_handle = 0
      LastError = GetLastError_()
     
      Debug "Error " + Str(LastError)
     
      If LastError = #ERROR_INTERNET_INVALID_CA
       
        dwBuffLen = SizeOf(dwFlags)
       
        InternetQueryOption_(request_handle, #INTERNET_OPTION_SECURITY_FLAGS, @dwFlags, @dwBuffLen)
       
        dwFlags | #SECURITY_FLAG_IGNORE_UNKNOWN_CA
        InternetSetOption_(request_handle, #INTERNET_OPTION_SECURITY_FLAGS, @dwFlags, SizeOf(dwFlags))
        Ok + 1
      Else
        Ok = 2
      EndIf
    Else
      Ok = 2
    EndIf
  Until Ok = 2
 
  Repeat
    ;выясним сколько нужно памяти для порции закачки
    InternetQueryDataAvailable_(request_handle,@Size,0,0)
    If Size=0:Break: EndIf ; Пока порции выдают будем качать!
    sBuffer = Space(Size)
    ; считываем считываем очередную порцию
    InternetReadFile_(request_handle, @sBuffer, Size, @Ret)
    result+ PeekS(@sBuffer, -1, #PB_UTF8)
    Delay(1)
  ForEver
 
  InternetCloseHandle_(open_handle)
  InternetCloseHandle_(connect_handle)
  InternetCloseHandle_(request_handle)
  InternetCloseHandle_(send_handle)
 
  ProcedureReturn result
EndProcedure
 
; -------------------- Example ------------------------
example.Pure_HTTP
example\fullurl = "https://whoer.net/ru"
example\referer = "http://purebasic.info"
 
Request.s = do_request(example)
 
start.l = FindString(Request, "Скопировать в буфер обмена") + 28
stop.l = FindString(Request, "<", start)
len.b = stop - start
Debug Mid(Request, start, len)



Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: https file download
СообщениеДобавлено: Сб окт 06, 2018 8:44 pm 
Не в сети
доцент
Аватар пользователя

Зарегистрирован: Вт апр 16, 2013 2:00 pm
Сообщений: 51
Откуда: Волгодонск
Благодарил (а): 3 раз.
Поблагодарили: 3 раз.
Пункты репутации: 5
Пётр писал(а):
https://www.purebasic.fr/english/viewtopic.php?f=12&t=42064

В 5.70 появились функции HTTPRequest() и HTTPRequestMemory(). https://www.purebasic.fr/english/viewto ... 65#p527365
В них есть возможность задать заголовок.


Всё отлично с 5.70 получилось, спасибо, а я не следил за бетами.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: https file download
СообщениеДобавлено: Ср окт 10, 2018 11:46 am 
Не в сети
профессор

Зарегистрирован: Пт фев 20, 2009 12:57 pm
Сообщений: 1717
Откуда: Алматы
Благодарил (а): 16 раз.
Поблагодарили: 47 раз.
Пункты репутации: 5
оба моих бесплатных хостинга как сговорились закрываются. точнее один уже, а второй вот вот. и я чо думаю - а мне список ссылок надо в программе получать с этого хостинга - может через почту делать? типа программа заходит на почту, получает этот список и показывает пользователю. почта с 2004 года на мылру вон... и до сих пор как часы. другое дело что алгоритм авторизации может изменится. скажут безопасности, начальника, не хватает. и там помница менялось один раз, что стало сложнее. но в целом думаю идея хорошая :) правда еще не известно как антивири отреагируют.


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

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


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

Сейчас этот форум просматривают: Google [Bot], newJS и гости: 11


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

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