Ricerca
 Italiano (Italia) English (United States)
Registrazione
Accedi
DotNetWork Forums
HTTPRequest Header
Ultimo Post 26 mar 2009 16.20 by Rudy (DNW TEAM). 4 Risposte.
Stampa immediata
Ordina:
PrevPrev ProssimoProssimo
Non sei autorizzato ad inviare una risposta.
AutoreMessaggi

Posts:407

--
23 mar 2009 17.09 
Ciao a tutti.
Volevo fare una piccola app che accede ad un sito.
Al di la della login, mi fermo gia' all'apertura della pagina

il codice che uso e' questo:

Private Sub leggi(ByVal url As String)
        If Not url = "" Then
            Try
                Dim client As New WebClient
                client.Headers.Add("user-agent", "Mozilla/4.0 (compatible: MSIE 6.0;Windows NT 5.2; .NET CLR 1.0.3705")

                Dim data As Stream = client.OpenRead(url)
                Dim reader As New StreamReader(data)
                Console.Writeline(reader.Readline)
            Catch ex As Exception

            End Try
        End If
    End Sub

ma ottengo sempre che non ho un browser supportato, qualunque cosa scriva nell'header.
I browser supportati sono IE, Firefox, opera ecc ...

Qualche suggerimento ?

Grazie.
Max

Posts:627

--
24 mar 2009 09.11 

Non so se ti rispondo fischi per fiaschi, però l'altro giorno dovevo fare un parser che mi generava un messaggio di posta da un file HTML creando le immagini embedded come richiesto dalle API del mio server. Ho scoperto così il controllo WebBrowser che inserito su una form permette di aprire una qualsiasi pagina HTML usando come URL l'HTTP oppure il percorso su disco e ti restituisce tutto il contenuto della pagina stessa come una serie di strutture che per quanto un pochino bruttarelle perché è un wrapper COM ti permettono di fare quel che vuoi sul codice HTML della pagina letta (leggerlo e scriverci dentro anche). Non so se può risolvere il tuo problema, però credo sia più semplice usare un controllo di quel tipo, magari nascosto e poi leggere le informazioni che ti servono e fare ciò che ti serve sulla pagina stessa.

Saluti

Sabrina

 

Inserito da Max su 23 mar 2009 18.09
Ciao a tutti.
Volevo fare una piccola app che accede ad un sito.
Al di la della login, mi fermo gia' all'apertura della pagina

il codice che uso e' questo:

Private Sub leggi(ByVal url As String)
        If Not url = "" Then
            Try
                Dim client As New WebClient
                client.Headers.Add("user-agent", "Mozilla/4.0 (compatible: MSIE 6.0;Windows NT 5.2; .NET CLR 1.0.3705")

                Dim data As Stream = client.OpenRead(url)
                Dim reader As New StreamReader(data)
                Console.Writeline(reader.Readline)
            Catch ex As Exception

            End Try
        End If
    End Sub

ma ottengo sempre che non ho un browser supportato, qualunque cosa scriva nell'header.
I browser supportati sono IE, Firefox, opera ecc ...

Qualche suggerimento ?

Grazie.
Max


Sabrina

Posts:496

--
25 mar 2009 08.02 

Prova questa:

Public Function OpenURL(ByVal sInURL As String) As String

       Dim iP As Integer
       Dim sURL As String
       Dim sURLHost As String
       Dim sURLPath As String

       Dim abyteReceive(1024) As Byte

       'The path parsing should be more robust ...
       iP = InStr(UCase$(sInURL), "HTTP://")
       If iP > 0 Then
           sURL = Mid$(sInURL, iP + 7)
       Else
           sURL = sInURL
       End If

       iP = InStr(sURL, "/")
       If iP > 0 Then
           sURLHost = Mid(sURL, 1, iP - 1)
           sURLPath = Mid(sURL, iP)
       Else
           sURLHost = sURL
           sURLPath = "/"
       End If

       'should be supporting HTTP 1.1
       Dim s As String = ""
       Dim sGet As String = "GET " & sURLPath & " HTTP/1.0" & vbCrLf
& " Host: " & sURLHost & vbCrLf & "Connection: Close" & vbCrLf &
vbCrLf
       Dim asciiGet As Encoding = Encoding.ASCII
       Dim abyteGet() As Byte = asciiGet.GetBytes(sGet)

       Try
           Dim hostentry As IPHostEntry = Dns.GetHostEntry(sURLHost)
           Dim hostadd As IPAddress = hostentry.AddressList(0)


           Dim EPhost As IPEndPoint = New IPEndPoint(hostadd, 80)
           Dim sockHTTP As Socket = New
Socket(AddressFamily.InterNetwork, SocketType.Stream,
ProtocolType.Tcp)

           sockHTTP.Connect(EPhost)

           If sockHTTP.Connected = False Then
               OpenURL = "Unable to connect to host: " & sURLHost
               Exit Function
           End If

           sockHTTP.Send(abyteGet, abyteGet.Length, 0)

           Dim iBytes As Integer = sockHTTP.Receive(abyteReceive,
abyteReceive.Length, 0)
           s = "HTML from " & sURL & "(" & hostadd.ToString & "):" & vbCrLf
           s &= asciiGet.GetString(abyteReceive, 0, iBytes)

           Do While iBytes > 0
               iBytes = sockHTTP.Receive(abyteReceive, abyteReceive.Length, 0)
               s &= asciiGet.GetString(abyteReceive, 0, iBytes)
           Loop

           sockHTTP.Close()
           sockHTTP = Nothing

       Catch ex As Exception

           MessageBox.Show(ex.Message)

       End Try

       OpenURL = s

   End Function

Rudy Azzan

Posts:407

--
26 mar 2009 10.03 
Ciao Ragazzi,
Grazie epr le risposte.
Ho usato in effetti WebBrowser.

Molto carino, infatti mettendolo nella form vedi anche cosa fa..

Ho fatto un faorm che compila i campi e preme il button "Accedi".

Scrivo a futura memoria che L'oggetto Document che restituisce WebBrowser diventa nothing (null) dopo l'evento DocumentCompleted.

Tutte le operazioni di parse vanno fatte li.

Almeno questo e' quello che ho capito.
Ora vado a giocare con le RegEx per fare un po di ScreenScraping...

Ciao !

p.s. Oggi funziona, che piacere ritrovarvi !!

Posts:496

--
26 mar 2009 16.20 
Prova questa:

Public Function OpenURL(ByVal sInURL As String) As String

Dim iP As Integer
Dim sURL As String
Dim sURLHost As String
Dim sURLPath As String

Dim abyteReceive(1024) As Byte

'The path parsing should be more robust ...
iP = InStr(UCase$(sInURL), "HTTP://")
If iP > 0 Then
sURL = Mid$(sInURL, iP + 7)
Else
sURL = sInURL
End If

iP = InStr(sURL, "/")
If iP > 0 Then
sURLHost = Mid(sURL, 1, iP - 1)
sURLPath = Mid(sURL, iP)
Else
sURLHost = sURL
sURLPath = "/"
End If

'should be supporting HTTP 1.1
Dim s As String = ""
Dim sGet As String = "GET " & sURLPath & " HTTP/1.0" & vbCrLf
& " Host: " & sURLHost & vbCrLf & "Connection: Close" & vbCrLf &
vbCrLf
Dim asciiGet As Encoding = Encoding.ASCII
Dim abyteGet() As Byte = asciiGet.GetBytes(sGet)

Try
Dim hostentry As IPHostEntry = Dns.GetHostEntry(sURLHost)
Dim hostadd As IPAddress = hostentry.AddressList(0)


Dim EPhost As IPEndPoint = New IPEndPoint(hostadd, 80)
Dim sockHTTP As Socket = New
Socket(AddressFamily.InterNetwork, SocketType.Stream,
ProtocolType.Tcp)

sockHTTP.Connect(EPhost)

If sockHTTP.Connected = False Then
OpenURL = "Unable to connect to host: " & sURLHost
Exit Function
End If

sockHTTP.Send(abyteGet, abyteGet.Length, 0)

Dim iBytes As Integer = sockHTTP.Receive(abyteReceive,
abyteReceive.Length, 0)
s = "HTML from " & sURL & "(" & hostadd.ToString & "):" & vbCrLf
s &= asciiGet.GetString(abyteReceive, 0, iBytes)

Do While iBytes > 0
iBytes = sockHTTP.Receive(abyteReceive, abyteReceive.Length, 0)
s &= asciiGet.GetString(abyteReceive, 0, iBytes)
Loop

sockHTTP.Close()
sockHTTP = Nothing

Catch ex As Exception

MessageBox.Show(ex.Message)

End Try

OpenURL = s

End Function


Il 24 marzo 2009 10.11, <Web@dotnetwork.it> ha scritto:
> RE: HTTPRequest Header
>
> Forum: Web Applications & Web Services - Inviato da: sabrina in data 24 mar
> 2009 09.11
>
> Non so se ti rispondo fischi per fiaschi, però l'altro giorno dovevo fare un
> parser che mi generava un messaggio di posta da un file HTML creando le
> immagini embedded come richiesto dalle API del mio server. Ho scoperto così
> il controllo WebBrowser che inserito su una form permette di aprire una
> qualsiasi pagina HTML usando come URL l'HTTP oppure il percorso su disco e
> ti restituisce tutto il contenuto della pagina stessa come una serie di
> strutture che per quanto un pochino bruttarelle perché è un wrapper COM ti
> permettono di fare quel che vuoi sul codice HTML della pagina letta
> (leggerlo e scriverci dentro anche). Non so se può risolvere il tuo
> problema, però credo sia più semplice usare un controllo di quel tipo,
> magari nascosto e poi leggere le informazioni che ti servono e fare ciò che
> ti serve sulla pagina stessa.
>
> Saluti
>
> Sabrina
>
>
>
> Inserito da Max su 23 mar 2009 18.09
> Ciao a tutti.
> Volevo fare una piccola app che accede ad un sito.
> Al di la della login, mi fermo gia' all'apertura della pagina
>
> il codice che uso e' questo:
>
> Private Sub leggi(ByVal url As String)
>         If Not url = "" Then
>             Try
>                 Dim client As New WebClient
>                 client.Headers.Add("user-agent", "Mozilla/4.0 (compatible:
> MSIE 6.0;Windows NT 5.2; .NET CLR 1.0.3705")
>
>                 Dim data As Stream = client.OpenRead(url)
>                 Dim reader As New StreamReader(data)
>                 Console.Writeline(reader.Readline)
>             Catch ex As Exception
>
>             End Try
>         End If
>     End Sub
>
> ma ottengo sempre che non ho un browser supportato, qualunque cosa scriva
> nell'header.
> I browser supportati sono IE, Firefox, opera ecc ...
>
> Qualche suggerimento ?
>
> Grazie.
> Max
>
>
>
Rudy Azzan
Non sei autorizzato ad inviare una risposta.

Active Forums 4.1
       
Articoli Pubblicati
Briciole di ereditarietà
Come aggiungere ulteriori funzionalità alla TreeView personalizzata
2009/06/05 | Autore: Francesca Mazzoni
Introduzione a Windows Presentation Foundation (parte 2)
La prima di una serie di traduzioni da articoli di MSDN o altre fonti che offrono un punto di partenza per iniziare a capire il WPF.
2007/07/29 | Autore: Patrizia Cosolo
Fritto Misto - Classi di uso comune (Parte 6)
Helper: Alcuni metodi per organizzarci nell'uso del file System
2007/10/28 | Autore: Sabrina Cosolo
Introduzione a Windows Presentation Foundation (parte1)
La prima di una serie di traduzioni da articoli di MSDN o altre fonti che offrono un punto di partenza per iniziare a capire il WPF.
2007/07/29 | Autore: Patrizia Cosolo
ADO.Net Nozioni di base (parte 1)
Una libreria helper base per usare comandi diretti in SQL Server
2008/03/09 | Autore: Sabrina Cosolo
Copiare dati fra Database con ADO.Net
Da Qui a Li e da Li a Qui usando OleDb e Access
2009/02/14 | Autore: Sabrina Cosolo
Fritto misto - Classi di uso comune (parte 1)
Helper: Una classe per operare sulle stringhe
2007/10/20 | Autore: Sabrina Cosolo
Miniguida alla OOP con il .NET Framework- Parte IV
Come gestire l'ereditarietà
2009/07/17 | Autore: Alberto De Luca
   Stampa     
Home|Community|Contenuti|Forums|Blogs|Workshops
© 2007-2010 by DotNetWork .:. Condizioni d'uso .:. Privacy .:. Accedi .:.