Kirjoittaja Aihe: [ratkaistu ] dy.fi -palvelun käyttö(ohjeet)  (Luettu 1298 kertaa)

teele

  • Käyttäjä
  • Viestejä: 849
    • Profiili
[ratkaistu ] dy.fi -palvelun käyttö(ohjeet)
« : 09.10.24 - klo:10.27 »
En ole mistään löytänyt tavis-tasoisia dy.fi -sivuston käyttöohjeita.

Esimerkiksi oman sivun nettiosoitteen päivittäminen pitänee tehdä kahden viikon tai viikon välein dy.fi :lle, jotta sivun osoite pysyy aktiivisena palvelussa. Nyt päivitys menee ilmeisesti perl-skriptin kautta, joka ajetaan palvelimen uudelleenkäynnistyksen yhteydessä.

Oman palvelimeni päivitysjärjestely on tehty ihan palvelinkokeilujen alussa ystävällisen asiantuntijan osaamisella, mutta en valitettavasti pysynyt hyvin nopeasti edenneiden työvaiheiden mukana. Nyt kun palvelin on jo jonkun aikaa ollut toiminnass, voisi olla järkevää opetella itsekin, miten se ja sen dy.fi-päivitys toimivat.

Tällä keskustelualustalla nm on jo ehkä vuosi - kaksi sitten kertonut, että dy.fi-päivityksen voisi tehdä jopa selaimen avulla, mutta silloin en päässyt asiassa eteen päin. Vaarana on, että pelkät kokeiluni ilman osaamista voisivat johtaa oman nettisivun katoamiseen kokonaan dy.fi-palvelusta.

Miten pitäisi toimia, että voisi lähettää oman nettisivun osoitteen ja sen päivityksen dy.fi-palveluun esimerkiksi c++:lla tai selaimella, ja miten varmistan, että lähetys on todella onnistunut?

hmm, olisiko tämä sittenkin Ohjelmointi ja palvelimet alueen aihe?
« Viimeksi muokattu: 13.10.24 - klo:22.30 kirjoittanut teele »

nm

  • Käyttäjä
  • Viestejä: 16406
    • Profiili
Vs: dy.fi -palvelun käyttö(ohjeet)
« Vastaus #1 : 09.10.24 - klo:12.41 »
Ohje päivityspyyntöjen tekemiseen: https://www.dy.fi/page/specification

Esimerkki curlilla:
Koodia: [Valitse]
curl -D - --user tunnus:salasana https://www.dy.fi/nic/update?hostname=omakone.dy.fi

Esimerkki wgetillä:
Koodia: [Valitse]
wget -q -O - --http-user=tunnus --http-passwd=salasana https://www.dy.fi/nic/update?hostname=omakone.dy.fi
Voit pyytää C++-esimerkin vaikka ChatGPT:ltä curl-esimerkin pohjalta.

teele

  • Käyttäjä
  • Viestejä: 849
    • Profiili
Vs: dy.fi -palvelun käyttö(ohjeet)
« Vastaus #2 : 11.10.24 - klo:13.31 »


Näin meni netin tekoälyllä:

Koodia: [Valitse]

write an equivalent program in pure c++ that performs curl -D - --user tunnus:salasana https://www.dy.fi/nic/update?hostname=omakone.dy.fi

Certainly! To perform an HTTP request in C++ similar to the curl command you provided, you can use the libcurl library, which is a popular choice for handling URL requests. Below is an example of how you can write a C++ program that performs the same action as your curl command.

First, make sure you have libcurl installed on your system. You can usually install it via your package manager. For example, on Ubuntu, you can use:

bash
sudo apt-get install libcurl4-openssl-dev


Here’s a simple C++ program that performs the equivalent operation:

cpp
#include
#include

int main() {
// Initialize CURL
CURL *curl;
CURLcode res;

// Replace with your actual username and password
const char* username = "tunnus";
const char* password = "salasana";
const char* url = "https://www.dy.fi/nic/update?hostname=omakone.dy.fi";

curl = curl_easy_init();
if(curl) {
// Set the URL
curl_easy_setopt(curl, CURLOPT_URL, url);

// Set the username and password for authentication
curl_easy_setopt(curl, CURLOPT_USERPWD, std::string(username) + ":" + std::string(password).c_str());

// Enable verbose output
curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);

// Perform the request
res = curl_easy_perform(curl);

// Check for errors
if(res != CURLE_OK) {
std::cerr << "curl_easy_perform() failed: " << curl_easy_strerror(res) << std::endl;
}

// Clean up
curl_easy_cleanup(curl);
} else {
std::cerr << "Failed to initialize CURL" << std::endl;
}

return 0;
}


includet pitää katsoa tarkemmin, mutta en ole vielä kokeillut käännöstä.

Mutta tekoäly näyttää hieman pinnanneen. Sehän ei kirjoittanut ohjelmaa pelkällä c++:lla, vaan käytti curlia, niin socket-oppeja tekoälyn koodista ei saa.

Jos haluaa dy.fi-palvelussa päivittää kahden sivun osoitteen, se menee ehkä näin

Koodia: [Valitse]
curl -D - --user tunnus:salasana https://www.dy.fi/nic/update?hostname=omasivu1.dy.fi,omasivu2.dy.fi

Toivottavasti, en ole ehtinyt tarkistaa, mutta muistelisin, että jossain dy.fi-ohjeissa oli, että jos haluaa useamman osoitteen päivitystä, eli osoitteet voisi laittaa pilkuilla erotettuina peräkkäin

Homma etenee, kiitos neuvoista. :)



« Viimeksi muokattu: 11.10.24 - klo:13.36 kirjoittanut teele »

nm

  • Käyttäjä
  • Viestejä: 16406
    • Profiili
Vs: dy.fi -palvelun käyttö(ohjeet)
« Vastaus #3 : 11.10.24 - klo:13.36 »
Mutta tekoäly näyttää hieman pinnanneen. Sehän ei kirjoittanut ohjelmaa pelkällä c++:lla, vaan käytti curlia, niin socket-oppeja tekoälyn koodista saa.

Voit aina tarkentaa kysymystä ja pyytää koodista uuden version kirjoitettuna esimerkiksi puhtaasti socketeilla tai jollain tietyllä laajasti tunnetulla kirjastolla.

teele

  • Käyttäjä
  • Viestejä: 849
    • Profiili
Vs: dy.fi -palvelun käyttö(ohjeet)
« Vastaus #4 : 11.10.24 - klo:14.07 »
 juu, kokeilin tällaista

Koodia: [Valitse]
write an equivalent program in pure c++ that performs wget -q -O - --http-user=tunnus --http-passwd=salasana https://www.dy.fi/nic/update?hostname=omakone.dy.fi  and shows socket interactions expicitely


tekoäly vastasi näin

Koodia: [Valitse]
Creating a C++ program that mimics the behavior of wget with explicit socket interactions involves using low-level socket programming. Below is a simple example that demonstrates how to perform an HTTP GET request with basic authentication. This example uses the standard C++ libraries along with POSIX socket functions.

Please note that this code is for educational purposes and may require additional error handling and features for production use.

`cpp
#include
#include
#include
#include
#include
#include
#include
#include
#include

std::string base64_encode(const std::string &in) {
static const std::string base64_chars =
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
"abcdefghijklmnopqrstuvwxyz"
"0123456789+/";

std::string out;
int val = 0, valb = -6;
for (unsigned char c : in) {
val = (val << 8) + c;
valb += 8;
while (valb >= 0) {
out.push_back(base64_chars[(val >> valb) & 0x3F]);
valb -= 6;
}
}
while (valb >= 0) {
out.push_back(base64_chars[(val >> valb) & 0x3F]);
valb -= 6;
}
while (out.size() % 4) out.push_back('=');
return out;
}

void http_get(const std::string &hostname, const std::string &path, const std::string &user, const std::string &pass) {
int sockfd;
struct sockaddr_in server_addr;
struct hostent *host;

// Create socket
if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
throw std::runtime_error("Socket creation failed");
}

// Get host information
if ((host = gethostbyname(hostname.c_str())) == nullptr) {
close(sockfd);
throw std::runtime_error("Host not found");
}

// Set up the server address structure
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(80); // HTTP port
std::memcpy(&server_addr.sin_addr.s_addr, host->h_addr, host->h_length);

// Connect to the server
if (connect(sockfd, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0) {
close(sockfd);
throw std::runtime_error("Connection failed");
}

// Prepare the HTTP GET request
std::ostringstream request;
std::string auth = user + ":" + pass;
std::string encoded_auth = base64_encode(auth);

request << "GET " << path << " HTTP/1.1\r\n"
<< "Host: " << hostname << "\r\n"
<< "Authorization: Basic " << encoded_auth << "\r\n"
<< "Connection: close\r\n"
<< "\r\n";

// Send the request
std::string req_str = request.str();
send(sockfd, req_str.c_str(), req_str.size(), 0);

// Receive the response
char buffer[4096];
while (true) {
ssize_t bytes_received = recv(sockfd, buffer, sizeof(buffer) - 1, 0);
if (bytes_received <= 0) break; // Connection closed or error
buffer[bytes_received] = '\0'; // Null-terminate the buffer
std::cout << buffer; // Print the response
}

// Close the socket
close(sockfd);
}

int main() {
try {
std::string hostname = "www.dy.fi";
std::string path =


eli taitaa kyllästyä vastauksen pituuteen ihan loppumatkalla. Mutta nyt tuli kuitenkin esille http-request ihan uutena, mielenkiintoisena asiana. Pitänee varmaan tutustua siihen, niin pääsee vähän enenmmän kärryille nettiviesteistä ja niitten kirjoittamisesta ja lähettämisesta ja vastaan ottamisesta.

Tekoaly oli hyvä vihje, se oli jo melkein unohtunut, kun kesällä sitä kokeillessa se kirjoitti aika levotonta koodia.   Kiitos  :)

igor_2

  • Käyttäjä
  • Viestejä: 765
    • Profiili
Vs: dy.fi -palvelun käyttö(ohjeet)
« Vastaus #5 : 11.10.24 - klo:15.11 »
Onko tämän tarkoitus olla ohjelmoinnin harjoitus?

Mutta ellei, niin eikö kaikkein helpointa olisi laittaa jompi kumpi edellä olleista komennoista pyörimään esim. anacronilla?

teele

  • Käyttäjä
  • Viestejä: 849
    • Profiili
Vs: dy.fi -palvelun käyttö(ohjeet)
« Vastaus #6 : 11.10.24 - klo:20.18 »

anacron on myös hyvä vihje. Olen nähnyt siitä ohjeita jossain, oikeastaan on monia asioita, joista on jotain hämärää mielikuvaa, mutta niiden harjoittelu puuttuu.

Alkuperäinen ongelma oli, että tiesin vain suunnilleen, miten pilvikoneella olevien osotteiden päivitys dy.fi -palvelussa menee, mutta ohjelmakoodin osalta asia oli täysin mysteeri. wget ja curl tuovat lisävalaistusta asiaan ja sitten, kun opin anacronin, asia hoitunee sillä ja curlilla tai wgetillä tai ehkä sopivalla c++ -ohjelmalla.

Ideana on tosiaan vähän opiskella asioita, niin kuin kirjoitit   :)

teele

  • Käyttäjä
  • Viestejä: 849
    • Profiili
Vs: dy.fi -palvelun käyttö(ohjeet)
« Vastaus #7 : 13.10.24 - klo:13.53 »

Eipäs vielä näytäkään ratkeavan. Kokeilin pilvikoneen päätteessä

Koodia: [Valitse]
curl -D - --user käyttäjänimi:salasana https://www.dy.fi/nic/update?hostname=omasivu1.dy.fi,omasivu2.dy.fi

jossa ajatuksena oli päivittää kahden sivuston osoitetiedot dy.fi -palveluun.

Vastauksena tuli

Koodia: [Valitse]
HTTP/1.1 401 Unauthorized
Server: nginx/1.10.3 (Ubuntu)
Date: Sun, 13 Oct 2024 10:19:59 GMT
Content-Type: text/plain;charset=UTF-8
Transfer-Encoding: chunked
Connection: keep-alive
Keep-Alive: timeout=10
Last-Modified: Sun, 13 Oct 2024 10:19:59 GMT
Cache-Control: no-cache
Pragma: no-cache
WWW-Authenticate: Basic realm="dy.fi update"

badauth

eli luultavasti salasana tai käyttäjätunnus ovat väärin. Yritin selvittää, mikä voisi olla käyttäjätunnukseni parin vuoden takaisista paperilapuista, mutta eei ehkä onnistunut sittenkään, salasana näytti ainakin olleen selvästi merkittynä.

Pääsen kyllä kirjautumaan käyttäjänä dy.fi -palveluun. Kirjautuduttaessa kysytään sp-osoite ja salasana. Salasana lienee siis oikein, vaikka sp-osoite ei enää olekaan käytössä.

Kirjauduttuani näin, että varaamani sivuilla oli voimassaoloaikaa 6 päivää ja 22 tuntia ja minuutteja päälle, vaikka en ollut ymmärtääkseni päivittänyt niitä ainakaan pariin päivään. Päivittäisikö dy.fi sivut sittenkin jostain syystä ihen itse?

Toisaalta olisiko hetznerin pilvipalvelin käynnistynyt hetznerin omien syiden takia uudestaan, jolloin myös pilvikoneeni olisi käynnistynyt uudestaan?

Pitäisikö curlissa laittaa käyttäjänimeksi sittenkin se sähköpostiosoite, jota käytetään kirjautumissa? (kokeilin tässä jo pari kertaa eri vaihtoehtoja, enkä viitsisi ihan heti yrittää osoitepäivitystä uudelleen, koska dy.fi -sivulla olevasta tekstistä päätellen näyttää siltä, että siellä ei tykätä liian usein tehtävistä päivityksistä, vaikka omat päivitykseni ovat ilmeisesti jääneet vain yrityksiksi)


nm

  • Käyttäjä
  • Viestejä: 16406
    • Profiili
Vs: dy.fi -palvelun käyttö(ohjeet)
« Vastaus #8 : 13.10.24 - klo:22.10 »
Toisaalta olisiko hetznerin pilvipalvelin käynnistynyt hetznerin omien syiden takia uudestaan, jolloin myös pilvikoneeni olisi käynnistynyt uudestaan?

Voit tarkistaa uptime-komennolla. Uudelleenkäynnistymiset näkyvät myös järjestelmälokissa ja luultavasti pilvikoneen monitorointitiedoissa pilvitarjoajan web-käyttöliittymässä.


Pitäisikö curlissa laittaa käyttäjänimeksi sittenkin se sähköpostiosoite, jota käytetään kirjautumissa?

Pitää. Dy.fi:ssä sähköpostiosoite on käyttäjätunnuksesi. Kaikki päivitysmekanismit toimivat samalla HTTP Basic Authentication -tunnistautumismekanismilla ja samanlaisella GET-pyynnöllä. Samat tunnukset toimivat siis niin dy.fi:n tarjomassa Perl-skriptissä kuin tässä curl-komennossa,  tai vaikka itse koodatulla sovelluksella lähetetyissä pyynnöissä.

teele

  • Käyttäjä
  • Viestejä: 849
    • Profiili
Vs: [ratkaistu ] dy.fi -palvelun käyttö(ohjeet)
« Vastaus #9 : 13.10.24 - klo:22.36 »
 curlilla

Koodia: [Valitse]
curl -D - --user käyttäjänimi:salasana https://www.dy.fi/nic/update?hostname=omasivu1.dy.fi,omasivu2.dy.fi

ja käyttäjänimeksi sähköposti ja salasanaan oma salasana.

Kiitoksia taas neuvoista   :)