Newsgroup: it.comp.www.php
Titolo: Login php da vba

Ciao,
vorrei raccogliere informazioni da un sito php.
 
Da vba
 
Set oHttp = CreateObject("MSXML2.XMLHTTP") '<--- PARTE MODIFICATA
oHttp.Open "GET", "
http://www.miosito.it
", False
oHttp.send
var = oHttp.responseText
 
In questo modo ottengo le informazioni da pagine pubbliche.
Vorrei estrarre informazioni anche da pagine protette da login evitando in questo modo di farlo a mano; ovviamente ho legalmente le credenziali per l'accesso al sito.
 
Qualche consiglio? 


da vba devi simulare l'accesso al login,
lo puoi fare tranquillamente tramite curl, vedi quasta libreria per VB VBA
 
http://curl.haxx.se/libcurl/vb/
 
 
Ciao

grazie per la risposta.
la cosa strana è che la mia soluzione delle volte va altre no.
non riesco a capire dov'è il problema
 
 


su due piedi e senza vedere codice o il messaggio di ritorno dal server 
è difficile aiutarti
comunque non è un problema di PHP, anche perchè quello che tenti di fare 
è catturare l'output di un Web Server, è questo esula dal php, perchè 
php lavora prima, cioè elabora le pagine che poi verranno inviate al web 
server che le invia al browser / app.
 
se utilizzi del codice VBA vedi su gruppi corrispondenti.
 
Ciao


Grazie mille per la risposta.
La risposta del server c'è il problema, a mio avviso, è nel passaggio delle credenziali (user+password).
Se trovo risposta posterò il riscontro.

 per l'accesso al sito.
 
Dipende dal tipo di autenticazione del server.
 
Se usa (caso rarissimo) l'autenticazione HTTP, ti basta passare le 
credenziali ad ogni richiesta (chiedi sul gruppo VBA come fare).
 
Se usa una pagina di login e la sessione per tenere le info dell'utente 
(99.9% dei casi), devi prima simulare il login come dice bramante, e poi 
passare ad ogni richiesta successiva il cookie di sessione che ti viene 
restituito dal server, in modo che il server ti riconosca.
 
Tieni conto che solitamente c'è un timeout (default 4 ore, se non ricordo 
male, ma ogni server potrebbe essere configurato in modo diverso) per cui 
se non fai richieste entro quel tempo, il server "ti disconnette".
 
Bye.

 
 
 
ok, ora riesco a "loggarmi" tramite vba
quando vado alla pagina che mi interessa non riesco a passargli il cookie
Il server mi risponde:
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Connection: Keep-Alive
Date: Thu, 07 Mar 2013 07:01:10 GMT
Keep-Alive: timeout=4, max=200
Pragma: no-cache
Transfer-Encoding: chunked
Content-Type: text/html
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Server: Apache/2.2.4 (Linux/SUSE)
Set-Cookie: PHPSESSID=fnilg17831kqji0h9etll3g11uh7bkpm; path=/; HttpOnly
Set-Cookie: gldata=4135; expires=Wed, 27-Mar-2013 07:01:10 GMT
X-Powered-By: PHP/5.2.4
 
Ho provato a passere "PHPSESSID=fnilg17831kqji0h9etll3g11uh7bkpm" sia con che senza il ";" ma la seconda pagina non risulta loggata.
Quale parametro devo passare.

Ho risolto: il problema era che passavo nella 2° pagina la password (che ovviamente non serviva più avendo già effettuato il login)
 
Se a qualcuno può interessare:
 
Dim url1 As String
Dim url2 As String
Dim pwd As String
Dim cookie As String
 
url1 = " 
http://www.sito.com/index.php
 "
url2 = " 
http://www.sito.com/index.php?page=...
.. "
pwd = "action=login&user=....&pass=....."
 
' *** EFFETTUA IL LOGIN ***
Call MakeSessionRequest("POST", url1, pwd, cookie, True)
' *** LEGGE LA PAGINA ***
pwd = ""
html = MakeSessionRequest("POST", url2, pwd, cookie)
 
 
Function MakeSessionRequest(method As String, url As String, data As String, ByRef cookie As String, Optional ByRef updateCookie = False) As Byte()
 
If Len(cookie) = 0 Then cookie = "dummy=dummy;"
httpReferrer = Trim(url)
postVars = Trim(data)
 
Dim XMLHTTP As Object
 
Set XMLHTTP = CreateObject("MSXML2.serverXMLHttp")
XMLHTTP.Open method, Trim(url), False
 
If UCase(method) = "POST" Then XMLHTTP.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
XMLHTTP.setRequestHeader "Referer", httpReferrer 'in case the server cares
XMLHTTP.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
XMLHTTP.setRequestHeader "Cookie", "to deal with XMLHTTP bug"
XMLHTTP.setRequestHeader "Cookie", cookie
XMLHTTP.send postVars
 
'wait for response
While XMLHTTP.readyState <> 4
    XMLHTTP.waitForResponse 1000
Wend
'Debug.Print , , , "--|||" & XMLHTTP.getResponseHeader("Set-Cookie")
If updateCookie Then
    cookie = ""
    strHeaders = XMLHTTP.getAllResponseHeaders()
    DA = InStr(1, strHeaders, "Set-Cookie: ")
    A = InStr(DA + 1, strHeaders, "path=/")
    cookie = Mid(strHeaders, DA + 12, A - DA - 12 - 2)
    'cookie = Replace(cookie, "PHPSESSID=", "")
End If
'return the response body
MakeSessionRequest = XMLHTTP.responseText
Set XMLHTTP = Nothing
End Function