Come faccio a fare un HTTP Post con l’Autenticazione di Base HTTP, utilizzando POCO?

Sto cercando di fare un HTTP Post con l’Autenticazione di Base HTTP (chiaro username e password), che utilizza POCO. Ho trovato un esempio di Ottenere e hanno provato a modificarlo, ma essendo un rookie credo di aver storpiato al di là della sua utilità. Qualcuno sa come fare questo?

Sì, ho già visto l’altra domanda su questo: POCO C++ – NET SSL – come inviare richiesta HTTPS, ma non riesco a dare un senso di come si sta cercando di implementare il nome utente e la password. Anche io non capisco l’utilizzo di “x-www-form-urlencoded”. Questo è necessario per un Post? Non ho un modulo. Voglio solo POST al server con i parametri username e password.

OriginaleL’autore Alyoshak | 2012-10-31

3 risposte

  1. 10

    Infine. Ecco come fare:

        HTTPClientSession session("yourdomain.com");
        session.setKeepAlive(true);
    
        Poco::Net::HTTPRequest req(Poco::Net::HTTPRequest::HTTP_POST, "/myapi.php/api/validate", HTTPMessage::HTTP_1_1);
        req.setContentType("application/x-www-form-urlencoded");
        req.setKeepAlive(true); //notice setKeepAlive is also called on session (above)
    
        std::string reqBody("[email protected]&password=mypword");
        req.setContentLength( reqBody.length() );
    
        std::ostream& myOStream = session.sendRequest(req); //sends request, returns open stream
        myOStream << reqBody;  //sends the body
    
        req.write(std::cout);
    
        Poco::Net::HTTPResponse res;
        std::istream& iStr = session.receiveResponse(res);  //get the response from server
        std::cerr << iStr.rdbuf();  //dump server response so you can view it
    
    Nel codice, si dispone di un esplicito commento sull’uso di setKeepAlive() sia la seduta e la richiesta. Si potrebbe eventualmente modificare la tua risposta per spiegare lo scopo di entrambi, e che l’effetto di lasciare uno o out?
    E c’è un motivo per non utilizzare HTTPBasicCredentials?
    No, No deliberata ragione io non uso HTTPBasicCredentials. Non ero a conoscenza di un sacco di cose allora. Era gettato in iOS e aveva altri progetti in corso. Dovrà rispondere il 1 ° domande più tardi.
    +1 come voi mi ha aiutato a rispondere a questa domanda: stackoverflow.com/questions/44333630/… Se siete ancora in giro magari mi può aiutare a ottenere il codice di autorizzazione utilizzando Poco Netto.
    Vedo che si è conclusa risponde alla vostra domanda 🙂

    OriginaleL’autore Alyoshak

  2. 3

    Quando si fa un POST HTTP, in genere i dati che viene inviato al server viene inviato in una delle due forme:

    • Nome,coppie di valori in cui il nome e il valore sono separate da “=”, e distinto coppie sono separate da “&”. Per esempio: var1=value1&var2=value2. Inoltre, queste coppie nome /valore che vengono inviati in modo che alcuni caratteri speciali e caratteri non alfanumerici vengono sostituiti da %HH, un segno di percentuale e di due cifre esadecimali che rappresentano il codice ASCII del carattere. Per esempio, se il valore del primo parametro incluso un “#”, dovrebbe essere inviato come var1=value1%23&var2=value2. Quando l’invio di dati in questo formato, il cliente è tenuto a inserire un’intestazione Content-Type con valore application/x-www-form-urlencoded in modo che il server potrebbe non essere in grado di decodificare correttamente i dati.

    • Come MIME multipart corpo in cui ogni parte può essere di grandi dimensioni nonché includere “non di escape” i dati (compresi i dati binari). Diverse parti MIME sono separati da un delimitatore di stringa (il confine) non viene visualizzato all’interno di qualsiasi MIME “payload”. Quando l’invio di dati in questo formato, il cliente è tenuto a inserire un’intestazione Content-Type con valore multipart/form-data.

    In caso di precedente StackOverflow domanda di riferimento, la richiesta del corpo viene inviato nel primo modo, come mostrato sopra. Spero che chiarisce.

    Riguarda,
    Siddharth

    Siddhart, che più che chiarire un po’. Grazie. Hai usato POCO? Se si è in grado di offrire il codice correttamente il Post con uname e pword utilizzando il POCO biblioteca cercherò di segnare la risposta corretta.

    OriginaleL’autore Siddharth Toshniwal

  3. 1

    Da POCO libreria delle credenziali di test, ecco il codice:

    HTTPRequest request;
    assert (!request.hasCredentials());
    
    HTTPBasicCredentials cred("user", "secret");
    cred.authenticate(request);
    assert (request.hasCredentials());
    std::string scheme;
    std::string info;
    request.getCredentials(scheme, info);
    assert (scheme == "Basic");
    assert (info == "dXNlcjpzZWNyZXQ=");
    
    HTTPBasicCredentials cred2(request);
    assert (cred2.getUsername() == "user");
    assert (cred2.getPassword() == "secret");
    

    Quando si invia la richiesta, si utilizzerà solo la prima parte di questo codice (arresto in cred.authenticate(request)).

    OriginaleL’autore Darth Vader

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *