Ciao ragazzi una domanda:
Ho creato un piccolo programma che, data una variabile inserita dall'utente, scarica un determinato file.
il dodice è questo
codice:
Dim m_strHttpResponse As String
Dim m_lDownloadedBytes As Long
Dim m_bHeaderReceived As Boolean
Dim m_lContentLength As Long
Dim m_bResponseReceived As Boolean
Dim RemotePer As String
Dim LocalPer As String
Dim Host As String
Private Sub Command1_Click()
codicetitolo = Text1.Text
Download
End Sub
Private Sub Form_Load()
Dim codicetitolo As String
End Sub
Private Sub Winsock1_Connect()
Dim strHttpRequest As String
strHttpRequest = "GET " & RemotePer & " HTTP/1.1" & vbCrLf
strHttpRequest = strHttpRequest & _
"Host: " & Host & vbCrLf
strHttpRequest = strHttpRequest & "Accept: */*" & vbCrLf
strHttpRequest = strHttpRequest & "Connection: close" & vbCrLf
strHttpRequest = strHttpRequest & vbCrLf
Winsock1.SendData strHttpRequest
Open LocalPer For Binary As #2
End Sub
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
'
On Error Resume Next
'
Dim intBreakPosition As Integer 'blank line start position
Dim vHeaders As Variant 'array of the HTTP headers returned by the Split function
Dim vHeader As Variant 'this var is used in the For Each...Next loop
Dim strData As String
'
'retrieve arrived data from winsock buffer
'
Winsock1.GetData strData
'
'store the data in the m_strHttpResponse variable
If (m_bHeaderReceived = True) Then
m_strHttpResponse = ""
End If
m_strHttpResponse = m_strHttpResponse & strData
m_lDownloadedBytes = m_lDownloadedBytes + bytesTotal
If Not m_bHeaderReceived Then
'the HTTP headers is not arrived yet
'look for blank line (= vbCrlf & vbCrLf)
intBreakePosition = InStr(1, m_strHttpResponse, vbCrLf & vbCrLf)
If intBreakePosition Then
'the blank line is found, turn off the m_bHeaderReceived flag
m_bHeaderReceived = True
m_lDownloadedBytes = m_lDownloadedBytes - intBreakePosition - 3
'split the headers into array vHeaders
vHeaders = Split(Left(m_strHttpResponse, intBreakePosition - 1), vbCrLf)
'look for the Content-Length header
For Each vHeader In vHeaders
If InStr(1, vHeader, "Content-Length") Then
'the headers is found, store its value in the m_lContentLength variable
m_lContentLength = CLng(Mid(vHeader, InStr(1, vHeader, " ") + 1))
Exit For
End If
Next
m_strHttpResponse = Mid(m_strHttpResponse, _
InStr(1, m_strHttpResponse, _
vbCrLf & vbCrLf) + 4)
Put #2, , m_strHttpResponse
End If
Else
If m_lContentLength > 0 Then
Put #2, , m_strHttpResponse
End If
End If
End Sub
Private Sub Winsock1_Close()
If Not m_bResponseReceived Then
Close #2
m_bResponseReceived = True
End If
Winsock1.Close
End Sub
Sub Download()
Resetta
RemotePer = "/d/quotes.csv?s=" + codicetitolo + "&f=sl1d1t1c1ohgv&e=.csv" 'path dopo il nome di dominio'
LocalPer = "C:\valoriazione.csv" 'dove salvare il file'
Winsock1.Connect Host, 80
While Winsock1.State <> 0
DoEvents
Wend
End Sub
Private Sub Resetta()
Host = "it.old.finance.yahoo.com" 'nome di dominio'
m_strHttpResponse = ""
m_bResponseReceived = False
m_bHeaderReceived = False
m_lDownloadedBytes = 0
End Sub
solo che non mi funziona e non riesco a capire il perchè.... se gli faccio scaricare dandogli il percorso staticamente lo fa alla perfezione. Come posso risolvere questo problema?
altra domanda: Una volta scaricato.... il file è composto da una semplice riga. Cosa posso usare per mettere la riga in un array e "baipassarla" per dividermi i campi a modo mio?
Grazie per le risposte