Buongiorno, ripropongo un problema che sto avendo su un server di test.
Sto preparando una funzionalità per eliminare un problema di url injection su una vecchia applicazione fatta in classic ASP.
Alla funzione viene passato una parte di url (es. CartellaA/CartellaB/file.asp) lo completa con le informazioni delle server variables e fa una richiesta http verso questo indirizzo.
Il problema è che nel mio ambiente di sviluppo non mi da problemi di alcuna sorta, su Test invece da l'errore
Description :The data necessary to complete this operation is not yet available
Error Source : msxml3.dll
Error number -2147483638
Questa è la mia funzione
Function FindPage(extendedUrl, redirect)
On Error Resume Next
dim straddr, url, protocol, status, virtualDir, rState
If extendedUrl = "" Then
FindPage = extendedUrl
Else
If Request.ServerVariables("HTTP_HOST") <> "" Then
straddr = Replace(Request.ServerVariables("HTTP_HOST"), "/", "")
Else
straddr = Replace(Request.ServerVariables("SERVER_NAME"), "/", "")
End If
virtualDir = Request.ServerVariables("PATH_INFO")
i = InStr(2, virtualDir, "/")
If i > 0 Then
virtualDir = Left(virtualDir, i - 1)
virtualDir = Replace(virtualDir, "/", "") & "/"
Else
virtualDir = ""
End If
protocol = LCase(Split(Request.ServerVariables("SERVER_PROTOCOL"), "/")(0))
url = protocol & "://" & straddr & "/" & virtualDir & extendedUrl
set xmlhttp = CreateObject("MSXML2.ServerXMLHTTP.3.0")
xmlhttp.open "GET", url, false
xmlhttp.setRequestHeader "Content-type", "application/x-www-form-urlencoded"
xmlhttp.setRequestHeader "Content-length", 0
xmlhttp.send
status = CInt(xmlhttp.Status)
rState = xmlhttp.readyState
If xmlhttp.readyState = 4 Then
If status >= 400 and status < 500 Then
FindPage = redirect
Else
FindPage = extendedUrl
End If
End If
set xmlhttp = nothing
End if
If err.Number <> 0 Then
Response.Write "<br><b>Errore in FindPage!</b><br>"
Response.Write "Description : " & err.Description & "<br>"
Response.Write "Error source : " & err.Source & "<br>"
Response.Write "Error number " & err.Number & "<br>"
Response.Write "Url : " & url & "<br>"
Response.Write "HTTP_HOST :" & Request.ServerVariables("HTTP_HOST") & "<br>"
Response.Write "SERVER_NAME :" & Request.ServerVariables("SERVER_NAME") & "<br>"
Response.Write "readyState : " & rState & "<br>"
Response.Write "Response Text : " & xmlhttp.responseText & "<br>"
Response.End
End If
End Function
L'errore credo di aver capito che si propone quando cerco di andare a leggere le proprietà dell'oggetto xmlhttp. Cercando tra il mare di forum in rete sembra che chi ha avuto questo problema aveva messo "true" all' argomento "async" della funzione Open di xmlhttp. Modificandolo in false sembra che vada sempre a posto.
Questo avrebbe senso, se il server è impegnato al momento non da subito la risposta e non valorizza xmlhttp. Ma nella mia funzione "async" è false, e ottengo lo stesso errore. Com'è possibile ? Forse ci sono dei settaggi particolari su IIS (io ho il 7.5, su test c'è il 6)? Oppure sto usando un oggetto COM (qui ""MSXML2.ServerXMLHTTP.3.0") errato ?
Non so esattamente dove sbattere la testa
Grazie in anticipo.