Problema con HTTP.SEND

di il
5 risposte

Problema con HTTP.SEND

Come da titolo, ho la necessità di inviare una richiesta verso un file php remoto, passando delle variabili a questultimo, lo script in php poi si occupa di inserire le variabili in un DB.

il punto è che, se inserisco il link completo di variabili in chrome, il tutto funziona perfettamente.

dallo script in VBA invece, ricevo status 200 dal server quindi il collegamento è ok, ma non ho nessun nuovo dato nel DB quindi qualcosa evidentemente nn funziona a dovere

per inoltrare la richiesta ho il seguente codice:


Set http=CreateObject("MSXML2.ServerXMLHTTP")

http.Open "POST", logListenerPath, False
http.SetRequestHeader "Content-type", "application/x-www-form-urlencode"
http.Send "request=chk&modello=RPE-V&matricola=114"

If http.Status = 200 Then
   SetVariableValue("OK_CONN",1)
MsgBox "online"

Else
   SetVariableValue("OK_CONN",0)
   MsgBox "off line"
End If


Set http=Nothing

5 Risposte

  • Re: Problema con HTTP.SEND

    Se esegui un link direttamente in un browser, si presuppone che tu stia eseguendo un comando GET, mentre nel codice tu stai facendo un POST.

    Idealmente, il comando POST sarebbe l'ideale per trasferire i dati, ma occorre vedere come è fatto lo script PHP e dove va a recuperare le informazioni che hai inviato.

  • Re: Problema con HTTP.SEND

    if ($_SERVER['REQUEST_METHOD'] === 'GET')
    {
    
        $comando= $_GET['request'];
        $modello = $_GET['modello'];
        $matricola = $_GET['matricola'];
    
    }
    
    if ($_SERVER['REQUEST_METHOD'] === 'POST')
    {
    
        $comando= $_POST['request'];
        $modello = $_POST['modello'];
        $matricola = $_POST['matricola'];
    
    }
    
    $servername = "**********";
    $username = "**********";
    $password = "**********";
    $dbname = "**********";
    // Create connection
    $conn = new mysqli($servername, $username, $password, $dbname);
    // Check connection
    if ($conn->connect_error)
    {
        die("Connection failed: " . $conn->connect_error);
    }
    
    
    
    if($comando=='chk'){
    
        date_default_timezone_set('Europe/Rome');
        $date = date("Y-m-d H:i:s");
    
        $sql="UPDATE MACCHINE SET ONLINE='$date' WHERE MODELLO='$modello' AND MATRICOLA='$matricola'";
    
        if (mysqli_query($conn, $sql)) 
        {
            echo "New record created successfully";
            } else {
            echo "Error: " . $sql . "<br>" . mysqli_error($conn);
        }
    
    }
    
    mysqli_close($conn);
    echo "updated";

    questo è il codice presente nel fai che riceve la richiesta ho provato ad eseguire sia GET che POST con gli stessi parametri ma continuo a non riuscire a far eseguire la query.

    non so se possa essere parte del problema ma, se provo a stampare a schermo la risposta del server alla mia richiesta ottengo questo :


     

  • Re: Problema con HTTP.SEND

    Io ho guardato alcuni esempi del componente MSXML2.ServerXMLHTTP, ma mi sembrano un pochino diversi dal codice che hai scritto tu (vedi la pagina relativa).

    Siamo sicuri che la chiamata sia corretta?
    Perché prima di inserire i dati su DB non fai una stampa di ciò che ricevi semplicemente dal client per verificare che i campi ci siano tutti?

    In qualche modo, lato client o lato server, devi fare debugging per capire cosa c'è che non va.

  • Re: Problema con HTTP.SEND

    Dunque, sono riuscito a venirne a capo piu o meno seguendo alcune procedure ho usato la console di chrome per controllare gli header che venivano inviati durante la richiesta fatta su chrome.

    ed è saltato fuori che con queste correzioni alla richiesta funziona tutto :

    ---------------------------------------------------------------------------------------------------

    http.Open "GET", logListenerPath, False

    http.SetRequestHeader "Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9"

    http.SetRequestHeader "Content-type", "application/x-www-form-urlencode"

    http.SetRequestHeader "Cache-Control", "no-cache"

    http.SetRequestHeader "Cookie", "__test=25ded795b93a4589f6d616b3dba1cea3"

    http.SetRequestHeader "Accept-Language", "it-IT,it;q=0.9,en-US;q=0.8,en;q=0.7"

    http.SetRequestHeader "Upgrade-Insecure-Requests", "1"

    http.SetRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36"

    http.Send

    -----------------------------------------------------------------------------------------------------------------------------

    facendo poi svariate prove ho constatato che il parametro che fa si che il tutto giri a dovere è :

    http.SetRequestHeader "Cookie", "__test=25ded795b93a4589f6d616b3dba1cea3"

    inserito nell'header mi fa vedere correttamente la risposta del server e il codice php viene eseguito correttamente.

    ora ammetto di avere lacune in merito e di non sapere al 100% il perchè in questa configurazione lo script funziona, diciamo che la soluzione è venuta fuori un po per tentativi dopo svariate ricerche, e forse un po a botta di culo, se qualcuno sa spiegarmi un po meglio l'inghippo sarei contento di apprendere.

    in piu, questo script deve essere eseguito su svariati dispositivi….se il valore del parametro cookie rimane sempre uguale per tutti i dispositivi posso esserci problemi di comunicazione?? 

    Grazie 

    e grazie alka per tempo e pazienza

  • Re: Problema con HTTP.SEND

    16/01/2023 - kaino86 ha scritto:


    in piu, questo script deve essere eseguito su svariati dispositivi….se il valore del parametro cookie rimane sempre uguale per tutti i dispositivi posso esserci problemi di comunicazione?? 

    Ho l'impressione che quel cookie potrebbe rappresentare un dato di sessione, o comunque un valore che viene impostato dal server durante la navigazione e che va conservato per essere successivamente reinviato assieme a tutti gli altri dati da inserire.

    Purtroppo però non è possibile dire granché di più, credo, perché bisognerebbe conoscere l'implementazione PHP, le ragioni d'uso di alcuni parametri, in breve la logica con cui è stata sviluppata l'applicazione lato server.

Devi accedere o registrarti per scrivere nel forum
5 risposte