No niin, nyt löytyi selaimen konsolikin, aina oppii uutta
Selaimen mukaan pitäisi lähettää oikeanlainen otsaketeito, jotta libhttpserveriltä tullutta pyyntöä suostuttaisiin käsittelemään.
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at file:///hello. (Reason: CORS request not http).
Uncaught (in promise) TypeError: NetworkError when attempting to fetch resource.
test_fun file:///home/k1/Documents/my_libhttpserver/testejä/testisyöttö01.html:25
onclick file:///home/k1/Documents/my_libhttpserver/testejä/testisyöttö01.html:1
Testisyöttösivu ja libhttpserver-ohjelma ovat samassa hakemistossa. Mutta jos otsaketiedot täytyy joka tapauksessa lähettää, niin sittenhän ohjelma toimisi ehkä jopa monipuolisemmin, jos se saadaan toimimaan.
libhttpserver-ohjelma on tällainen
#include <iostream>
#include "/home/k1/Documents/my_libhttpserver/libhttpserveri/libhttpserver/src/httpserver.hpp"
#include <iostream>
#include <fstream>
#include <string>
#include <bits/stdc++.h>
std::string filetostring(const std::string& filename)
{
std::fstream newfile;
std::string string1; // tiedosto stringinä
newfile.open(filename, std::ios::in);
if(newfile.is_open() )
{
std::string row1;
while(getline(newfile, row1))
{
string1 += '\n' + row1;
} // while loppuu
} // if loppuu
return string1;
} // filetostring loppuu
class hello_world_resource : public httpserver::http_resource
{
public:
const std::shared_ptr<httpserver::http_response> render(const httpserver::http_request&);
std::string data01, data02;
};
// Using the render method you are able to catch each type of request you receive
const std::shared_ptr<httpserver::http_response> hello_world_resource::render(const httpserver::http_request& req)
{
std::cout << std::endl;
std::string datapar01 = req.get_arg("data01");
std::string datapar02 = req.get_arg("data02");
std::string datapar03 = req.get_arg("data03");
std::string datapar04 = req.get_arg("data04");
std::string datapar05 = req.get_arg("data05");
std::string datapar06 = req.get_arg("data06");
std::string datapar07 = req.get_arg("data07");
std::string datapar08 = req.get_arg("data08");
std::string datapar09 = req.get_arg("data09");
std::string datapar10 = req.get_arg("data10");
std::string datapar11 = req.get_arg("data11");
std::cout << "Now data 1 is:" << datapar01 << std::endl;
std::cout << "Now data 2 is:" << datapar02 << std::endl;
std::cout << "Now data 3 is:" << datapar03 << std::endl;
return std::shared_ptr<httpserver::http_response>(new
//httpserver::string_response("viesti palvelimelta", 200, "text/html"));
httpserver::string_response("viesti palvelimelta", 200, "text/plain"));
}
int main()
{ // porttinumero ja säiemäärä parametreina
httpserver::webserver ws = httpserver::create_webserver(8080).start_method(httpserver::http::http_utils::INTERNAL_SELECT).max_threads(5);
hello_world_resource hwr;
ws.register_resource("/hello", &hwr, true); // tällä kutsutaan
ws.start(true); // blocking on true, non blocking olisi false
return 0;
}
// g++ libhttpserver03.cpp -o libhttpserver03 -Wall -pedantic -L/usr/local/lib -lhttpserver -lmicrohttpd -pthread -std=c++17
ja testisyöttösivu tällainen
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<title> testisyöttö, versio 01 </title>
</head>
<body style="text-align: left;">
<h1 style="color: green;"> Testisyöttö 01 </h1>
<p> Napsauta kaavake auki </p>
<button onClick="test_fun()">Avaa kaavake </button>
<p id="prgh"></p>
<script>
async function test_fun()
{
alert("kokeilufunktio alkaa");
let response = await fetch('/hello');
let text = await response.text(); // read response body as text
alert(text.slice(0, 80) + '...');
}
</script>
</body>
</html>
Valitettavasti netistä ei haulla "libhttpserver CORS" juurikaan taida olla apua
Luulo on, että libhttpserver laittaa tarvittavia otsaketietoja automaattisesti. Pitäisikö ne kuitenkin kirjoittaa johonkin kohtaan ohjelmassa?