Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - HTTPwebrequest
Forum - C# / VB.NET - HTTPwebrequest - Pagina 4

Pagine: [ 1 2 3 4 5 ] Precedente | Prossimo
Avatar
GoLDBeRG (Ex-Member)
Expert


Messaggi: 331
Iscritto: 19/12/2005

Segnala al moderatore
Postato alle 10:35
Venerdì, 10/07/2009
Codice sorgente - presumibilmente VB.NET

  1. Imports System
  2. Imports System.IO
  3. Imports System.Net
  4. Imports System.Net.Sockets
  5. Imports System.Threading
  6. Imports System.Text
  7.  
  8. Public Class download
  9.  
  10.     Public filegen As Long
  11.     Dim sock As Socket
  12.     Dim down As NetworkStream
  13.     Dim altro(1024) As Byte
  14.  
  15.     Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
  16.         Dim h As New Thread(AddressOf vedi)
  17.         h.Start()
  18.     End Sub
  19.  
  20.     Public Sub vedi()
  21.         sock = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
  22.         sock.Connect("colossus.altervista.org", 80)
  23.         ' sock.Connect("www.artfiles.org", 80)
  24.         down = New NetworkStream(sock)
  25.         ' send("OPTIONS http://www.artfiles.org/knoppix/KNOPPIX_V5.1.1CD-2007-01-04-EN.iso")
  26.         sock.BeginReceive(altro, 0, altro.Length, SocketFlags.None, New AsyncCallback(AddressOf ricevi), Nothing)
  27.         send("HEAD http://colossus.altervista.org/file/Colossus.zip")
  28.     End Sub
  29.  
  30.     Public Sub send(ByVal data As String)
  31.         If data.EndsWith(vbCrLf) = False Then
  32.             data &= vbCrLf
  33.         End If
  34.         Dim byt() As Byte = Encoding.ASCII.GetBytes(data)
  35.         down.Write(byt, 0, byt.Length)
  36.         down.Flush()
  37.     End Sub
  38.  
  39.     Public Sub ricevi(ByVal ar As IAsyncResult)
  40.         Dim int As Integer = sock.EndReceive(ar)
  41.         If int > 1 Then
  42.             Dim str As String = Encoding.ASCII.GetString(altro)
  43.             MsgBox(str)
  44.             sock.BeginReceive(altro, 0, altro.Length, SocketFlags.None, New AsyncCallback(AddressOf ricevi), Nothing)
  45.         Else
  46.             Exit Sub
  47.         End If
  48.     End Sub
  49.  
  50.     Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
  51.         Try
  52.             Label2.Text = Int((impo.quanti / 1024) / 5)
  53.             impo.quanti = 0
  54.         Catch ex As Exception
  55.  
  56.         End Try
  57.     End Sub
  58.  
  59.     Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  60.         Dim p As New conn
  61.         Dim thr As New Thread(AddressOf p.scarica)
  62.         thr.Start()
  63.     End Sub
  64. End Class



vedi questa stringa qui


Codice sorgente - presumibilmente Plain Text

  1. send("HEAD http://colossus.altervista.org/file/Colossus.zip")



al posto di HEAD se metti GET ti manda direttamente il file... quindi ricevi caratteri illeggibili... se metti OPTIONS da Errore... se metti HEAD ti sputa in faccia.... ci deve essere un comando per farmi dire quanto è grande.....

PM Quote
Avatar
riseofapocalypse (Ex-Member)
Pro


Messaggi: 150
Iscritto: 08/07/2009

Segnala al moderatore
Postato alle 11:03
Venerdì, 10/07/2009
Leggi un po' qua: http://it.wikipedia.org/wiki/Http
In pratica per utilizzare il metodo GET si fa così:
Codice sorgente - presumibilmente Plain Text

  1. Send(System.Text.Encoding.ASCII.GetBytes("GET http://colossus.altervista.org/file/Colossus.zip HTTP/1.1" & vbNewLine & vbNewLine))


Ora il messaggio di errore è diverso: 400 Bad Request

PM Quote
Avatar
GoLDBeRG (Ex-Member)
Expert


Messaggi: 331
Iscritto: 19/12/2005

Segnala al moderatore
Postato alle 13:44
Venerdì, 10/07/2009
richiesta errata? :|

PM Quote
Avatar
riseofapocalypse (Ex-Member)
Pro


Messaggi: 150
Iscritto: 08/07/2009

Segnala al moderatore
Postato alle 14:01
Venerdì, 10/07/2009
Beh almeno adesso non dice che il comando è inutilizzabile! :rotfl: però dovrebbe funzionare, secondo le indicazioni di Wikipedia... :yup:

PM Quote
Avatar
GoLDBeRG (Ex-Member)
Expert


Messaggi: 331
Iscritto: 19/12/2005

Segnala al moderatore
Postato alle 14:20
Venerdì, 10/07/2009
stavo pensando.... visto che col socket pure l'apache fa il cretino e non ci dice quanto è grande il file... se usiamo al posto dei sock i webclient? pero' sempre tanti come fossero socket.....

PM Quote
Avatar
riseofapocalypse (Ex-Member)
Pro


Messaggi: 150
Iscritto: 08/07/2009

Segnala al moderatore
Postato alle 14:41
Venerdì, 10/07/2009
Non è colpa del Socket, anche usando Telnet da gli stessi problemi :yup:

Ho appena provato con il WebClient e indovina un po'...il Server accetta la richiesta! Evidentemente la Microsoft ha fatto in modo che i Socket non siano puri! -.-"

CI SONO RIUSCITO! :rotfl:
Codice sorgente - presumibilmente VB.NET

  1. Dim wc As New Net.WebClient
  2.         Dim b1() As Byte = wc.Encoding.GetBytes("GET /file/Colossus.zip HTTP/1.1" & vbNewLine & vbNewLine)
  3.         wc.OpenWrite("http://colossus.altervista.org/").Write(b1, 0, b1.Length)
  4.         Dim s2 As IO.Stream = wc.OpenRead("http://colossus.altervista.org/file/Colossus.zip")
  5.         Dim b2 As New List(Of Byte)
  6.         For i As Integer = 0 To wc.ResponseHeaders(Net.HttpResponseHeader.ContentLength) - 1
  7.             b2.Add(s2.ReadByte)
  8.         Next
  9.         IO.File.WriteAllBytes("C:\casa.zip", b2.ToArray)


wc.ResponseHeaders(Net.HttpResponseHeader.ContentLength) è il numero di byte! :D ora possiamo trovare il modo di dividere il file :k:

Ultima modifica effettuata da riseofapocalypse il 11/07/2009 alle 10:31
PM Quote
Avatar
GoLDBeRG (Ex-Member)
Expert


Messaggi: 331
Iscritto: 19/12/2005

Segnala al moderatore
Postato alle 19:19
Venerdì, 10/07/2009
ti ha mai detto nessuno che sei un genio ragazzo mio :pat:

PM Quote
Avatar
riseofapocalypse (Ex-Member)
Pro


Messaggi: 150
Iscritto: 08/07/2009

Segnala al moderatore
Postato alle 21:10
Venerdì, 10/07/2009
Muhahaha grazie :rotfl: avevamo la soluzione sotto gli occhi :D

Ti informo che oggi, 11 Luglio 2009, quando cerco di ottenere:
Codice sorgente - presumibilmente Plain Text

  1. wc.ResponseHeaders(Net.HttpRequestHeader.ContentLength)


Mi da errore! -_-"
Codice sorgente - presumibilmente Plain Text

  1. InvalidOperationException non è stata gestita.
  2. Questo insieme contiene intestazioni di risposta. Non può contenere l'intestazione di richiesta specificata.



Che stupido sono stato! Certo che non funzionava, utilizzavo un RequestHeader per ottenere il RespondeHeader! Invece è così:
Codice sorgente - presumibilmente Plain Text

  1. wc.ResponseHeaders(Net.HttpResponseHeader.ContentLength)


:rotfl:

Ultima modifica effettuata da riseofapocalypse il 11/07/2009 alle 10:27
PM Quote
Pagine: [ 1 2 3 4 5 ] Precedente | Prossimo