Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 | 2 |

 

  Вопрос: Господа помогите пожалуйста(VB6) Добавлено: 14.03.07 10:43  

Автор вопроса:  darkdrive | Web-сайт: HET | ICQ: HET 

Ответить

  Ответы Всего ответов: 16  

Номер ответа: 16
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #16 Добавлено: 16.03.07 00:35
скорее всего ты запрос неправельно формируешь, у других сайтов сервак более прохаванный вот и работают...

По поводу проксей...
ты вот Connect делаешь к тому сайту с которого что-то забрать тебе надо, а то берёшь вместо него, коннектишся к проксе, и посылаешь ей тот же запрос Get ... далее получаешь ответ - всё как обычно...

Щас приведу нормальную загрузку, работающую и для больших данных, делал там для МАгента... не обращай внимание

форма
Option Explicit
Dim mAgent As New cMAgent


Private Sub Form_Load()
    
    'Óñòàíàâëèâåì ñâÿçè ñ ñîêåòÊîíòðîëîì
    Set VBSocketContainer = Me          'mTransferByVBSocket
    mAgent.LinkToSocketControl = Me.T1  'cMAgent
    
    
    mAgent.AgentServer = DownloadFileToVar("mrim.mail.ru", 443)    'Îïðåäåëÿåì ñåðâåð ìÀãåíòà
    Debug.Print mAgent.AgentServer
    
    
End Sub

Private Sub T1_DataArrival(Data As String)
    Select Case T1.Tag
        Case ";DownloadFileToVar"    'mTransferByVBSocket
            If ResivingLen = 0 Or Len(Trim$(Data)) = 0 Then
                'Ïîëó÷àåì ðàçìåð çàêà÷èâàåìûõ äàííûõ
                Dim S As Long, e As Long
                S = InStr(1, Data, "Content-Length:", 1)
                S = S + Len("Content-Length:";)
                e = InStr(S, Data, vbCrLf, 1)
                ResivingLen = VBA.Val(VBA.Trim$(VBA.Mid$(Data, S, e)))
                'Åñëè íå ïîëó÷èëè, ñ÷èòàåì ÷òî ýòî âñå ÷òî åñòü...
                If ResivingLen = 0 Then ResivingLen = Len(Data)
            End If
            'Ñèãíàëèçàòîð ïðèõîäà äàííûõ
            Shape1.Visible = True 'Ìàãàþùàÿ ëàìïî÷êà ( òàéìåðå äåëàåòñÿ False)
            AllDownloadedData = AllDownloadedData & Data
    End Select
End Sub

Private Sub Timer1_Timer()
    'Ìèãàíèå ëàìïî÷êè ïðè¸ìà äàííûõ
    Shape1.Visible = False
End Sub


модуль
Option Explicit
Private Declare Sub Sleep Lib "kernel32.dll" (ByVal dwMilliseconds As Long)

Public ResivingLen         As Long     'Îáùèé ðàçìåð çàêà÷èâàåìûõ äàííûõ
Public AllDownloadedData   As String   'Çàêà÷àííûå äàííûå íà òåêóùèé ìîìåíò

Public VBSocketContainer As Object

'Ô-öèÿ çàêà÷êè ôàéëà ÷åðåç VBSocket
Public Function DownloadFileToVar(strFile As String, Optional lPort As Long = 80) As String
    Dim Reqest As String, strHost As String
    Dim S As Long
    Dim timeout As Integer
    
    VBSocketContainer.Timer1.Enabled = True
    
    'Ïîëó÷àåì èìÿ õîñòà èç àäðåñà
    S = VBA.InStr(1, strFile, "://", 1) + 3
    timeout = VBA.InStrB(S, strFile, "/", 1) - 1
    If S = 3 Then S = 1: If timeout < 1 Then timeout = Len(strFile)
    strHost = VBA.Mid$(strFile, S, timeout)
    
    '&#206;&#225;&#237;&#243;&#235;&#255;&#229;&#236; &#240;&#224;&#225;&#238;&#247;&#232;&#229; &#239;&#229;&#240;&#229;&#236;&#229;&#237;&#237;&#251;&#229;
    timeout = 0: S = 0: VBSocketContainer.T1.Tag = ";DownloadFileToVar": ResivingLen = 0: AllDownloadedData = ""
    
    VBSocketContainer.T1.AlertMode = Yes '&#207;&#238;&#234;&#224;&#231;&#251;&#226;&#224;&#242;&#252; &#238;&#248;&#232;&#225;&#234;&#232;
    VBSocketContainer.T1.Connect strHost, lPort '&#207;&#238;&#228;&#234;&#235;&#254;&#247;&#224;&#229;&#236;&#241;&#255;
    
    Do While VBSocketContainer.T1.State = Connecting
        DoEvents
        Call Sleep(100&;)
        timeout = timeout + 1
        If timeout > 200 Then '20 c&#229;&#234;
            MsgBox "&#205;&#229;&#242; &#238;&#242;&#226;&#229;&#242;&#224; &#238;&#242; " & strHost, vbCritical, "Timeout"
            ;DownloadFileToVar = ""
            Exit Function
        End If
    Loop '&#198;&#228;&#184;&#236; &#239;&#238;&#228;&#234;&#235;&#254;&#247;&#229;&#237;&#232;&#255;
    
    '&#212;&#238;&#240;&#236;&#232;&#240;&#243;&#229;&#236; http &#231;&#224;&#239;&#240;&#238;&#241;
    Reqest$ = "GET " & strFile & " HTTP/1.1" & vbCrLf & _
              "Host: " & strHost & vbCrLf & _
              "Referer: " & strHost & vbCrLf & _
              "Proxy-Connection: Keep-Alive" & vbCrLf & _
              "Content-Type: application/x-www-form-urlencoded" & vbCrLf & _
              "Pragma: no-cache" & vbCrLf & vbCrLf
    
    VBSocketContainer.T1.SendData Reqest$ '&#206;&#242;&#239;&#240;&#224;&#226;&#235;&#255;&#229;&#236; &#229;&#227;&#238;
    
    timeout = 0  '&#209;&#247;&#184;&#242;&#247;&#232;&#234; &#242;&#224;&#233;&#236;&#224;&#243;&#242;&#224; &#241;&#225;&#240;&#224;&#241;&#243;&#229;&#236;
    
    '&#198;&#228;&#184;&#236; &#239;&#238;&#234;&#224; &#239;&#238;&#235;&#243;&#247;&#229;&#237;&#237;&#251;&#229; &#228;&#224;&#237;&#237;&#251;&#229; &#225;&#243;&#228;&#243;&#242; &#225;&#238;&#235;&#252;&#248;&#229; &#247;&#229;&#236; &#240;&#224;&#231;&#236;&#229;&#240; &#234;&#238;&#242;&#238;&#240;&#251;&#233; &#226;&#229;&#240;&#237;&#243;&#235; &#237;&#224;&#236; &#241;&#229;&#240;&#226;&#229;&#240; ResivingLen
    '&#253;&#242;&#238; &#225;&#243;&#228;&#229;&#242; &#238;&#231;&#237;&#224;&#247;&#224;&#242;&#252; &#247;&#242;&#238; &#226;&#241;&#229; &#228;&#224;&#237;&#237;&#251;&#229; &#241;&#234;&#224;&#247;&#224;&#237;&#251;, &#237;&#243; &#232;&#235;&#232; &#239;&#238;&#247;&#242;&#232; &#226;&#241;&#229; :) &#242;.&#234;. &#242;&#224;&#236; &#229;&#249;&#184; + &#231;&#224;&#227;&#238;&#235;&#238;&#226;&#238;&#234; &#239;&#224;&#234;&#229;&#242;&#224; :)
    Do Until Len(AllDownloadedData) >= ResivingLen And ResivingLen > 0
        DoEvents
        Call Sleep(100&;)
        timeout = timeout + 1
        If timeout > 200 Then '20 c&#229;&#234;
            MsgBox "&#205;&#229;&#242; &#238;&#242;&#226;&#229;&#242;&#224; &#238;&#242; " & strHost, vbCritical, "Timeout"
            ;DownloadFileToVar = ""
            Exit Function
        End If
    Loop
    
    Call Sleep(1000&;) '&#214;&#243;&#242;&#252;-&#246;&#243;&#242;&#252; &#230;&#228;&#184;&#236;, &#247;&#242;&#238;&#225;&#251; &#242;&#238;&#247;&#237;&#238; &#226;&#241;&#229; &#231;&#224;&#227;&#240;&#243;&#231;&#232;&#235;&#232;&#241;&#252; :)
    DoEvents
    VBSocketContainer.T1.CloseConnection
    S = InStr(1, AllDownloadedData, vbCrLf & vbCrLf, 1) '&#206;&#239;&#240;&#229;&#228;&#229;&#235;&#255;&#229;&#236; &#234;&#238;&#237;&#229;&#246; &#231;&#224;&#227;&#238;&#235;&#238;&#226;&#234;&#224;
    If S <> 0 Then S = S + 4 Else S = 1
    ;DownloadFileToVar = VBA.Mid$(AllDownloadedData, S, ResivingLen) '&#200; &#238;&#242;&#240;&#229;&#231;&#224;&#229;&#236; :)
    AllDownloadedData = ""
    ResivingLen = 0
    VBSocketContainer.Timer1.Enabled = False
End Function

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам