curl

Mattepuffo's logo
Identificare IP pubblico e privato da terminale in Linux

Identificare IP pubblico e privato da terminale in Linux

Oggi vediamo una carrellata di comandi per identificare il nostro IP, pubblico e privato, su Linux (da terminale ovviamente).

Cominciamo con l'IP del nostro pc (alternativa al classico ifconfig):

$ ip addr | awk '/inet / {sub(//.*/, "", $2); print $2}'
127.0.0.1
192.168.1.131

Per conoscere l'IP pubblico, invece, useremo un comando agganciandolo ad un servizio esterno.

Mattepuffo's logo
PHP RESTful client

PHP RESTful client

Di default PHP non ha librerie per interrogare un servizio RESTful.

L'unico modo sarebbe usare cURL, o una libreria esterna.

Tra le varie disponibili mi sono buttato su Pest.

Questo perchè non ha altre dipendenze, e per installarla basta copiare i tre file sul server.

La libreria mette a disposizione tre classi, rispettivamente per:

  • leggere i dati in formato plain text
  • leggere i dati in formato JSON
  • leggere i dati in formato XML

Usare la libreria è molto semplice.

Mattepuffo's logo
HTTPie: un'ottima alternativa a cURL

HTTPie: un'ottima alternativa a cURL

Attraverso la mia rivista preferita (Linux Pro) sono venuto a conoscenza di quest'ottimo programma: HTTPie.

Sostanzialmente possiamo definirlo come una alternativa più easy a cURL.

Dovrebbe essere disponibile tranquillamente nei repo; su Archlinux:

# pacman -Sy httpie

Una volta installato, per vedere le varie opzioni disponibili, basterà dare il comando senza opzioni:

$ http
usage: http [--json] [--form] [--pretty {all,colors,format,none}]
            [--style STYLE] [--print WHAT] [--verbose] [--headers] [--body]
            [--stream] [--output FILE] [--download] [--continue]
            [--session SESSION_NAME_OR_PATH | --session-read-only SESSION_NAME_OR_PATH]
            [--auth USER[:PASS]] [--auth-type {basic,digest}]
            [--proxy PROTOCOL:PROXY_URL] [--follow] [--verify VERIFY]
            [--timeout SECONDS] [--check-status] [--ignore-stdin] [--help]
            [--version] [--traceback] [--debug]
            [METHOD] URL [REQUEST_ITEM [REQUEST_ITEM ...]]
http: error: the following arguments are required: URL, REQUEST_ITEM

Sennò potete sempre usare l'help:

$ http --help

A questo punto vediamo qualche esempio.

Mattepuffo's logo
Montare FTP in Linux

Montare FTP in Linux

Se usiamo un Desktop Environment (tipo KDE, GNOME, XFCE, ecc...) possiamo montare directory FTP remote tranquillamente attraverso il file manager.

Ma se siamo su una distro che usa solo terminale, dobbiamo usare un tool da riga di comando: curlftpfs.

Prima di tutto installiamolo:

# pacman -Syu curlftpfs

Poi dobbiamo creare una directory in cui montare il server remoto.

In genere si usa creare una directory in /media o /mnt; su Archlinux da un pò di tempo si usa la directory /var/run/media/UTENTE.

Createla dove vi fa più comodo e / o seguendo le linee guida della vostra distro:

# mkdir /run/media/utente/ftp_remoto/

A questo punto siamo pronti per cominciare.

Mattepuffo's logo
Parsing JSON in C++ con Rapidjson

Parsing JSON in C++ con Rapidjson

Per fare il parsing di una struttra JSON in C++ ci stanno molte librerie; io mi sono buttato su Rapidjson.

La documentazione sul sito ufficiale non è proprio il massimo, ma nel complesso è abbastanza semplice da implementare e includere nel nostro progetto.

Scaricate la libreria e aggiungete la cartella rapidjson al progetto; dentro ci stanno diversi file .h.

Quello che faremo è usare CURL per prendere i dati da remoto, fare il cast di CURLcode in string, e infine parsare i dati JSON.

Cominciamo come al solito dal file di intestazione:

#ifndef READ_H
#define    READ_H

#include <iostream>
#include <curl/curl.h>
#include <iomanip>
#include "rapidjson/document.h"
#include "rapidjson/rapidjson.h"

using namespace std;
using namespace rapidjson;

extern "C" int readCurlHelper(char *data, size_t size, size_t nmemb, string *buffer);

class Read {
public:
    Read();
    virtual ~Read();
    void read(string file);
    size_t curlToString(char *data, size_t size, size_t nmemb, string *buffer);
private:
    string response;
    string url;
    CURL *curl;
    CURLcode res;
    struct curl_slist *headers;
    Document document;
};

#endif

Rispetto all'ultimo articolo, abbiamo aggiunto le librerie rapidjson e un oggetto Document.

Mattepuffo's logo
Da CURLcode a string in C++

Da CURLcode a string in C++

In questo articolo abbiamo introdotto l'uso di CURL in C++ facendo un esempio di base.

In genere però é più probabile dover trasformare la risposta che ci arriva come oggetto CURLcode, ad esempio in string perchè poi processata.

Ad esempio se ci arriva in JSON (come nel mio caso).

Quindi dobbiamo convertire CURLcode in string.

Per farlo dobbiamo apportare un pò di modifiche; cominciamo dal file .h:

#ifndef READ_H
#define    READ_H

#include <iostream>
#include <curl/curl.h>

using namespace std;

extern "C" int readCurlHelper(char *data, size_t size, size_t nmemb, string *buffer);

class Read {
public:
    Read();
    virtual ~Read();
    void read(string file);
    size_t curlToString(char *data, size_t size, size_t nmemb, string *buffer);
private:
    string response;
    string url;
    CURL *curl;
    CURLcode res;
    struct curl_slist *headers;
};

#endif

Abbiamo aggiunto due funzioni, una interna che si occupa di costruire la stringa, e una esterna che si occupa della conversione.