PureBasic - форум

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » PureBasic - форум » Вопросы по PureBasic » Скачать интернет страницу по HTTPS


Скачать интернет страницу по HTTPS

Сообщений 1 страница 6 из 6

1

Как скачать интернет страницу по защищенному соединению на PureBasic?
Провозились пол-дня, результата ноль.
На Питоне-3 это делается в три строки, а можно и в одну:

Код:
import requests

url_1 = 'https://www.purebasic.com'
r = requests.get(url_1, allow_redirects=True)
open('J:\index1.htm', 'wb').write(r.content)

url_2 = 'https://younglinux.info'
r = requests.get(url_2, allow_redirects=True)
open('J:\index2.htm', 'wb').write(r.content)

open('J:\index3.htm', 'wb').write(requests.get('https://younglinux.info/oopython/doc.php', allow_redirects=True).content)

open('J:\index4.htm', 'wb').write(requests.get('http://pure-basic.narod.ru/article/mk/prog_pic/prog_pic.html', allow_redirects=True).content)

Вот такой код на PureBasice отлично работает по обычному http протоколу:

Код:
Procedure.l DownloadToMem(URL.s, *lpRam, ramsize ) ; процедура для скачивания фала в память
  Protected agent.s, hInet, hData, Bytes.l

  agent.s = "Mozilla/4.0 (compatible; ST)"
  hInet = InternetOpen_( @agent.s,0,0,0,0 )
  hData = InternetOpenUrl_( hInet, @URL.s, "", 0, $8000000, 0 )
 
  If hData > 0 
    InternetReadFile_( hData, *lpRam, ramsize, @Bytes )
  Else  
    Bytes = -1 
  EndIf
 
  InternetCloseHandle_(hInet)
  InternetCloseHandle_(hData)
 
  ProcedureReturn Bytes
EndProcedure

 #content_file = 0

 Dim html.a(1000000)
 
 ;site_URL.s = "https://younglinux.info"   ;  15631 байт-кусок
 ;site_URL.s = "http://pure-basic.narod.ru/article/mk/prog_pic/prog_pic.html"   ; дает скрипт
 ;site_URL.s = "http://www.purebasic.mybb.ru"    ; ОТЛИЧНО  14393 байт
 site_URL.s = "https://www.purebasic.com"   ;  4349 байт-кусок
 
Size=DownloadToMem(site_URL, @html(), 1000000)
MessageRequester("Получи", PeekS(@html(), Size, #PB_Ascii))
       
If CreateFile(#content_file, "J:\index.htm") 
  WriteString(#content_file, PeekS(@html(), Size, #PB_Ascii) ) 
  CloseFile(#content_file) 
EndIf 

В конце кода закомментированы три строки адресов страниц с урлами, комментариями дано что происходит:
из четырех попыток скачать страницы только одна успешная по незащищенному соединению - там где в комменте ОТЛИЧНО.
две попытки на https дают кусок страниц, а незащищенная народ.ру вываливает скрипты бэкдорной рекламы не доходя до тега <html>

Может ли кто дать рабочий код на пюребейсике, потому что на питоне сложности с графическим интерфейсом на PyQt5, да и хочется чтобы все это приложение было в виде одного exe-файла

Заранее спасибо всем

0

2

А штатная функция с Пурике не древнее v 5.60

*Buffer = ReceiveHTTPMemory(URL$ [, Flags [, UserAgent$]])
Описание

Загружает файл в новый буфер памяти с данного URL$

не работает?
Она вроде как на curl, или ищите как работать с curl напрямую.

0

3

OllyRom написал(а):

Вот такой код на PureBasice отлично работает по обычному http протоколу:

Он и по HTTPS будет работать.
Wininet поддерживает защищенное соединение.

0

4

ВиниПур написал(а):

А штатная функция с Пурике не древнее v 5.60 не работает?
Она вроде как на curl, или ищите как работать с curl напрямую.

У меня портабельные версии v-5.11 и v-5.3.
Основная для работы 5.11, может поэтому и не получалось.
Если можно брось ссылку на дистрибутив подлеченный, можно в личку, на яндекс или гуглодиск, попробую.
Стоит задача на работе выдать тестовую программу работы промышленного робота в трех средах, определился с ними - сишарп, питон и пюребейсик. Начальник хочет увидеть =верхнюю= программу (то есть которая на компе) нижняя которая на микроконтроллере уже написана, и определиться что делать дальше. Надо было качнуть сайты с документацией, а они все на https сидят.
Доки уже скачал, но для интереса попробую на пюре.

0

5

Пётр написал(а):

Он и по HTTPS будет работать.
Wininet поддерживает защищенное соединение.

А можно кусок кода в студию.
Чтобы на диске оказался не рваный файл как закомментировано в конце выложенного кода.

0

6

Проверил код из первого сообщения. Скачивает страницы с https.
Чтобы получить всю страницу нужно ее полностью считать, а не один раз вызвать InternetReadFile и надеяться что страница будет считана.

Код:
Procedure.l DownloadToMem(URL.s, *lpRam, ramsize ) ; процедура для скачивания фала в память
  Protected agent.s, hInet, hData, Bytes.l
  
  agent.s = "Mozilla/4.0 (compatible; ST)"
  hInet = InternetOpen_( @agent.s,0,0,0,0 )
  hData = InternetOpenUrl_( hInet, @URL.s, "", 0, $8000000, 0 )
  
  If hData > 0 
    Protected rb
    Bytes = 0
    Repeat
      rb=0
      InternetReadFile_(hData, *lpRam+Bytes, ramsize-Bytes, @rb)
      Bytes+rb
    Until rb=0
  Else  
    Bytes = -1 
  EndIf
  
  InternetCloseHandle_(hInet)
  InternetCloseHandle_(hData)
  
  ProcedureReturn Bytes
EndProcedure

0


Вы здесь » PureBasic - форум » Вопросы по PureBasic » Скачать интернет страницу по HTTPS