Kirjoittaja Aihe: libhttpserverin POST-parametrin välitys  (Luettu 2393 kertaa)

teele

  • Käyttäjä
  • Viestejä: 850
    • Profiili
libhttpserverin POST-parametrin välitys
« : 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.



nm

  • Käyttäjä
  • Viestejä: 16425
    • Profiili
Vs: libhttpserverin POST-parametrin välitys
« Vastaus #1 : 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.
 
« Viimeksi muokattu: 20.02.22 - klo:22.12 kirjoittanut nm »