Ubuntu Suomen keskustelualueet

Ubuntun käyttö => Ohjelmointi, palvelimet ja muu edistyneempi käyttö => Aiheen aloitti: teele - 20.02.22 - klo:20.40

Otsikko: libhttpserverin POST-parametrin välitys
Kirjoitti: teele - 20.02.22 - klo:20.40

Post-parametrin välitys aiheuttaa ongelmia libhttpseverissä. Eroaako post-parametrin rekisteröinti get-parametrin rekisteröinnistä libhttpserverissä niin, että httpserver::http_request& hyväksyy vain get_arg -menetelmän get-parametreiile.

Kokeilin tällaista luokkaa

Koodia: [Valitse]
class file_response_resource3 : public httpserver::http_resource
{
 public:
 const std::shared_ptr<httpserver::http_response> render_POST(const httpserver::http_request& req)
{
  std::string datapar06 = req.get_arg("data06");  // ??????
  std::cout << "!!!!!!!data06 on nyt:" << datapar06 << std::endl; // ??????
  return std::shared_ptr<httpserver::file_response>(new httpserver::file_response("textareafile.html", 200, "text/html"));
     }
}; // luokka file_response_resource3 loppuu


tällaisen javascript-funktion kautta

Koodia: [Valitse]
async function fetch_textareafile02() // postina, libhttpserverissä
{                                     // laitettava postiksi
 let response = await fetch('textareafile.html',
     {
      method: 'POST',
      headers: {
                 "Content-Type": "text/plain;charset=UTF-8"
               },
      body: { 'data06': 'ÖÅÖÅÖÅÖÅÖÅÖÅÖÅÖÅÖÅÖÅ ' }
       }
     );
  let text = await response.text();
  form_var = document.getElementById("form01");
  textarea_var = form_var.tekstialue_id;
  textarea_var.value += text + '\t'; 
}

Html sivulla tekstialue päivittyy, mutta libhttpserver-puolella parametrin arvo ei tulostu. Kokeilin myös    post_arg("data06"); , mutta arvaus meni vähän pieleen, koska vain get_arg menetelmä on olemassa. Eroavatko get- ja post-käsittelyt libhttpserverissä jotenkin html-parametrien suhteen, vai teenkö taas jonkun mielikuvituksekkaan virheen tässäkin asiassa.


Otsikko: Vs: libhttpserverin POST-parametrin välitys
Kirjoitti: nm - 20.02.22 - klo:22.10
Lähetät data06:n bodyssä ja vieläpä text/plain-tyyppisenä, jolloin mikään vastaanottopuolen komponentti ei tulkitse sitä argumenttina. Voit kuitenkin lukea bodyn sisällön libhttpserverin get_content() -metodilla. Kannattaa tosin vaihtaa content-typeksi application/json ja tulkita viesti palvelinpuolella jollain tarkoitukseen sopivalla JSON-parserilla. Muuten menee aika hankalaksi etenkin, jos tarkoituksena olisi välittää useita eri tyyppisiä argumentteja.

Vaihtoehtoisesti voisit lähettää argumentit lomakkeiden tapaan application/x-www-form-urlencoded -muodossa, jolloin libhttpserverin get_arg()-metodi osaa tulkita ne suoraan.