Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB6 > Изображение PNG


Автор: eldar22 24.9.2008, 19:17
Вот проблема
есть скрипт по адресу

http://wwww.сайт.ru/captcha/imagebuilder.php

если отправить GET запрос по этому адресу появиться изображение в формате PNG

Как это  изображение отобразить в компоненте Image1?

 smile 

Автор: Akina 24.9.2008, 20:04
Отправить запрос из Internet Transfer Control, полученный ответ передать в ImageBox 

Автор: eldar22 25.9.2008, 18:42
Я отправил get  запрос
Код

Private Sub Command3_Click()
Dim strURL As String
Dim strHeader As String





strURL = "http://wwww.сайт.ru/captcha/imagebuilder.php"
strHeader = "Content-Type: application/x-www-form-urlencoded" & vbNewLine & _
"conection:keep-alive" & vbNewLine & _
"Referer: http://www.site.ru/" & vbNewLine & _
"User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)"




Inet1.Execute strURL, "GET" , strHeader




А вот как полученный ответ передать в ImageBox?

Автор: ProgramerForever 1.10.2008, 12:44
Насколько мне известно, ImageBox не поддерживает формат PNG. Для отображения в ImageBox нужно предварительно конвертировать PNG в BMP, JPEG, GIF или другой совместимый формат. Конвертировать можно с помощью библиотеки GDI+. Сам пробовал написАть конвертер с этой библиотекой - ничего не получилось, что-то в системе не так - VB постоянно слетал smile .

Автор: eldar22 2.6.2009, 22:23
Вопрос в силе

 как полученный ответ передать в ImageBox или PictureBox?

Вот get запрос

Код

Dim strURL As String
Dim strToASP As String
Dim strHeader As String

strHeader = "Host: filgab.ex6.ru" & vbNewLine & _
            "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; MRSPUTNIK 2, 0, 1, 90 SW; MRA 5.4 (build 02620); .NET CLR 2.0.50727; Dealio Toolbar 3.4; InfoPath.1)" & vbNewLine & _
            "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" & vbNewLine & _
            "Accept-Language: ru,en-us;q=0.7,en;q=0.3" & vbNewLine & _
            "Accept-Encoding: gzip,deflate" & vbNewLine & _
            "Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7" & vbNewLine & _
            "Keep-Alive: 300" & vbNewLine & _
            "Referer: http://filgab.ex6.ru/" & vbNewLine & _
               "Connection: keep-alive" & vbNewLine



strToASP = ""

strURL = "http://filgab.ex6.ru/engine/modules/antibot.php"
Inet1.Execute strURL, "get", strToASP, strHeader

Автор: neic 2.6.2009, 22:35
Сам долго искал. Вот хороший компонент (или библа не помню уже)

Автор: eldar22 3.6.2009, 11:28
neic за компонент и пример спасибо
Вот только вопрос все равно в силе остаётся ну не как не могу передать ответ PictureBox

Автор: neic 3.6.2009, 11:55
Эммм...ну у Inet1 должно быть событие в котором тебе и передаст ответ.
Проверить не могу, IE7 стоит, а удалять влом.

Автор: eldar22 3.6.2009, 12:00
Ладно попробую по другому объяснить

Это организованно на Delphi

Код

procedure TForm1.Button1Click(Sender: TObject);
var
f:tfilestream;
Im: TJpegImage;
begin



Im := TJpegImage.Create;
f:=tfilestream.Create('c:\temp.jpeg',fmcreate);

IdHTTP1.get('http://filgab.ex6.ru/engine/modules/antibot.php',f);

f.Free;

image1.Picture.LoadFromFile('c:\temp.jpeg');
end;

end.


Как на vb организовать это?

Автор: Akina 3.6.2009, 13:27
eldar22, озаботьтесь прочитать ВСЮ справку по контролу, а не первые две буквы. Особенно обратите внимание на методы OpenURL и GetChunk

Автор: neic 3.6.2009, 14:16
Цитата(eldar22 @  3.6.2009,  12:00 Найти цитируемый пост)
Как на vb организовать это? 

Да я понял, что ты хочешь, но ни чем не могу помочь из-за сломаного Inet =(
А делфи я знаю на уровне текстбоска =)

Автор: eldar22 3.6.2009, 15:51
GetChunk

Код

Private Sub Command1_Click()
  Dim strURL As String
Dim strToASP As String
Dim strHeader As String

strHeader = "Host: www.filgab.ex6.ru" & vbNewLine & _
            "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.10) Gecko/2009042316 MRA 5.4 (build 02620) Firefox/3.0.10" & vbNewLine & _
            "Accept: image/png,image/*;q=0.8,*/*;q=0.5" & vbNewLine & _
            "Accept-Language: ru,en-us;q=0.7,en;q=0.3" & vbNewLine & _
            "Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7" & vbNewLine & _
            "Keep-Alive: 300" & vbNewLine & _
            "Referer: http://filgab.ex6.ru/" & vbNewLine & _
            "Connection: keep-alive" & vbNewLine



strToASP = ""

strURL = "http://filgab.ex6.ru/engine/modules/antibot.php"
Inet1.Execute strURL, "get", strToASP, strHeader
End Sub

Private Sub Inet1_StateChanged(ByVal State As Integer)
Dim vtData As String
Select Case State
Case icResponseCompleted
    vtData = Inet1.GetChunk(1024, icString)
    RichTextBox1.Text = ""
    Do While LenB(vtData) > 0
        RichTextBox1.Text = RichTextBox1.Text & vtData
        vtData = Inet1.GetChunk(1024, icString)
    Loop
Case icError
    Inet1.Cancel
    RichTextBox1.Text = "Error Raised."
Case Else
End Select
End Sub



Ну все равно изображение не появляеться даже в текстовом варианте

Автор: Akina 3.6.2009, 16:08
Цитата(eldar22 @  3.6.2009,  16:51 Найти цитируемый пост)
изображение не появляеться даже в текстовом варианте 

Ты хочешь сказать, что ничего в RichTextBox1 не поступает? приведённый код должен поместить в него HTML-текст страницы. Откуда надо отпарсить URL капчи и запросить её вторым запросом.

Но скорее всего ты там ещё и с хедерами лишнего напахал. Разбираться лень, просто скажи - а нахрена они вообще нужны? неужели без них не работает?

Попробуй текст получить через OpenURL. А вот саму капчу потом - уже с помощью GetChunk.

Автор: eldar22 3.6.2009, 16:38
Если строку strURL = "http://filgab.ex6.ru/engine/modules/antibot.php" изменить на это
strURL = "http://filgab.ex6.ru"
То html получит, но мне нужна сама капча 

Цитата

Откуда надо отпарсить URL капчи и запросить её вторым запросом.


Зачем парсить url капчи это уже слишком

Капча jpeg формата 
И ещё на Delphi это организоваеться  очень легко не надо парсить 
Неужели vb такое организовать нельзя без парсинга

Автор: Akina 3.6.2009, 16:44
eldar22, значит так... если ты в БРАУЗЕРЕ набираешь это своё http://filgab.ex6.ru/engine/modules/antibot.php - что получаешь в ответ? картинку? URL при этом в строке меняется? и что видишь, если попросишь исходный HTML-текст?

Автор: eldar22 3.6.2009, 18:00
Я получу вот это Hacking attempt!

А всё таки  парсить не надо

Вот что я хотел сказать

Код

Option Explicit
Dim Size As Long, Got As String
Private Sub Command1_Click()
  Dim strURL As String
Dim strToASP As String
Dim strHeader As String
Inet1.AccessType = icDirect

strHeader = "Host: www.filgab.ex6.ru" & vbNewLine & _
            "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.10) Gecko/2009042316 MRA 5.4 (build 02620) Firefox/3.0.10" & vbNewLine & _
            "Accept: image/png,image/*;q=0.8,*/*;q=0.5" & vbNewLine & _
            "Accept-Language: ru,en-us;q=0.7,en;q=0.3" & vbNewLine & _
            "Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7" & vbNewLine & _
            "Keep-Alive: 300" & vbNewLine & _
            "Referer: http://filgab.ex6.ru/" & vbNewLine & _
            "Connection: keep-alive" & vbNewLine



strToASP = ""

strURL = "http://filgab.ex6.ru/engine/modules/antibot.php"
Inet1.Execute strURL, "get", strToASP, strHeader
End Sub

Private Sub Inet1_StateChanged(ByVal State As Integer)
Dim s As String
If State = icResponseReceived Then
    If Size = 0 Then Size = Inet1.GetHeader("Content-length"): Label1 = "Всего: " & Size: DoEvents
    Do
        On Error GoTo Away
        s = Inet1.GetChunk(1024, icByteArray)
        If 0 = Len(s) Then Exit Do
        Got = Got & StrConv(s, vbUnicode)
        Label2 = "Получено: " & Len(Got)
        If Len(Got) = Size Then
            Open "output" For Output As 1
            Print #1, Got;
            Close 1
            Exit Do
        Else
            DoEvents
        End If
    Loop
Away:
End If
End Sub



Открываешь файл output с помощь программа для просмотра изображение и вот она капча smile 

Автор: neic 3.6.2009, 21:44
Чё-т я вообще не понял, чего хотел и чего ты получил! Akina а ты?

Автор: Akina 3.6.2009, 22:15
Цитата(neic @  3.6.2009,  22:44 Найти цитируемый пост)
Akina а ты? 

Да всё я понял... Но то, что сделано с геморроем через GetChunk, можно было сделать легко и непринуждённо, в одну строку, через OpenURL в массив байтов. Правда, для этого надо было всё-таки справку-то почитать...

Автор: eldar22 5.6.2009, 14:22
Цитата

через OpenURL в массив байтов


Вот так? что ли

Код

Dim b() As Byte 
Inet1.URL = "http://filgab.ex6.ru/engine/modules/antibot.php" 
b = Inet1.OpenURL(Inet1.URL, icByteArray) 
Open "c:\test.jpeg" For Binary Access Write As #1
Put #1, , b()
Close #1
End Sub 

Автор: Akina 5.6.2009, 14:32
Именно. Ну если надо - довесив соотв. хедеры.

Автор: eldar22 5.6.2009, 14:56
Akina, 
Цитата

Ну если надо - довесив соотв. хедеры. 

А как довесив соотв. хедеры?
Код

strHeader = "Host: www.filgab.ex6.ru" & vbNewLine & _
            "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.10) Gecko/2009042316 MRA 5.4 (build 02620) Firefox/3.0.10" & vbNewLine & _
            "Accept: image/png,image/*;q=0.8,*/*;q=0.5" & vbNewLine & _
            "Accept-Language: ru,en-us;q=0.7,en;q=0.3" & vbNewLine & _
            "Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7" & vbNewLine & _
            "Keep-Alive: 300" & vbNewLine & _
            "Referer: http://filgab.ex6.ru/" & vbNewLine & _
            "Connection: keep-alive" & vbNewLine


Автор: eldar22 7.6.2009, 21:43
Akina
Вы сказали

Цитата

Ну если надо - довесив соотв. хедеры. 


А вот как нужные хедеры довесить?

У меня только получается отправить вот это

Код

GET /engine/modules/antibot.php HTTP/1.1
Accept: image/gif,image/x-xbitmap,image/jpeg,image/pjpeg,*/*
User-Agent: Microsoft URL Control - 6.01.9782
Host: filgab.ex6.ru
Connection: Keep-Alive
Cache-Control: no-cache

Автор: eldar22 8.6.2009, 16:39
 smile 
Вопрос решён

Код

Private Sub Command1_Click()
Dim strHeader As String
Dim strToASP As String
Dim strURL As String
strHeader = "Host: www.filgab.ex6.ru" & vbNewLine & _
            "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.10) Gecko/2009042316 MRA 5.4 (build 02620) Firefox/3.0.10" & vbNewLine & _
            "Accept: image/png,image/*;q=0.8,*/*;q=0.5" & vbNewLine & _
            "Accept-Language: ru,en-us;q=0.7,en;q=0.3" & vbNewLine & _
            "Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7" & vbNewLine & _
            "Keep-Alive: 300" & vbNewLine & _
            "Referer: http://filgab.ex6.ru/" & vbNewLine & _
            "Connection: keep-alive" & vbNewLine
            strURL = "http://filgab.ex6.ru/engine/modules/antibot.php"
            strToASP = ""
Inet1.Execute strURL, "get", strToASP, strHeader

End Sub




Private Sub Inet1_StateChanged(ByVal State As Integer)
Dim vtData() As Byte
Dim intFile As Long

Select Case State
   'здесь можно обрабатывать другие события
   Case icResponseCompleted '12
      'открываем файл для записи принимаемых данных
      intFile = FreeFile
        Open "Capcha" For Binary Access Write As #intFile
      'принимаем первую порцию данных
      vtData = Inet1.GetChunk(1024, icByteArray)
        Do While LenB(CStr(vtData)) > 0
            Put #intFile, , vtData
            'следующая порция данных
            vtData = Inet1.GetChunk(1024, icByteArray)
           
        Loop
        Put #intFile, , vtData
        Close #intFile
End Select

End Sub

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)