Newsgroup: it.comp.os.linux.sys
Titolo: Inviare dati POST da bash

Dovrei inviare ad una pagina web dei dati tramite http POST... da uno script
bash.
Cosa posso usare?
Al più potrei usare il metodo GET... Ma non ditemi di codificare l'indirizzo
a manina...
-- 
  Narcolessico
 
http://binaryunit.blogspot.com

 
Io direi wget
$ wget --post="v1=ciao&v2=cippalippa&v3=trombettaro"
http://server/dir/pagina.php
(tutto su una riga)
eventualmente con la chiave -O puoi dire dove salvare l'output (dovesse
servire) e per mandarlo su stdout aggiungi a quello che ti ho indicato
le chiavi -q e -O -
quindi il comando diventa
$ wget -q -O - --post="a=1&b=2" 
http://www.ciao.com/a.php
O al limite puoi utilizzare curl (man curl per le chiavi)
LP

 
http://server/dir/pagina.php
Grazie, stavo giusto dando un'occhiata al man di wget. Solo che, essendo i
dati da inviare una incognita per me (sono contenuti in un file), dovrei
eseguire un preprocessing in qualche modo. Per esempio, anche il solo fatto
di evitare che sia contenuto senza escape il delimitatore di stringa che
uso quando chiamo wget...
Cosa succede se v1= "ciao"pippo"? Dovrei scrivere "ciao\"pippo"... Quindi
far passare il tutto con sed/tr. Questo basta, o devo stare attento ad
altro (e.g. newlines)?
Ancora: ho fatto un primo test con wget e ottengo un
  HTTP/1.1 401 Authorization Required
mentre se invio i dati da un form html normalissimo via post la pagina è
visualizzata. La pagina in php è:
<?php
        if(isset($_POST['p1'])) $s1=$_POST['p1']; else $s1="";
        if(isset($_POST['p2'])) $s2=$_POST['p2']; else $s2="";
        echo "1:\n$s1\n2:\n$s2 "
?>
E wget lo chiamo così:
wget -S -U \
"Mozilla/5.0 (X11; U; Linux i686; it-IT; rv:1.8.1.1) Gecko/20061205
Firefox/
2.0.0.1
" \
--post-data 'p1=uno&p2=due' \
http://indirizzo/postest.php
Perchè mi da un 401 se uso wget, e non se uso il browser?
-- 
  Narcolessico
 
http://binaryunit.blogspot.com

 Cosa posso usare?
WGET te l'hanno già detto.
La butto lì ... php + CURL ? Ovvero, ti scrivi du' righe in php che 
fanno quello che vuoi, e chiami tutto da bash.
ciao, f.

 
Perché ti dice che è richiesta una autorizzazione.
Questo non dipende dalla pagina, ma dal server web.
È stato impostato per essere raggiungibile da utenti autorizzati.
Infatti il browser dovrebbe chiederti username e password con un popup.
Per wget devi utilizzare le chiavi --user e --password in modo da
fornire le tue credenziali.
Alternativamente puoi inserire una riga nel file .netrc che indichi per
il server lo username e password da utilizzare.
La ricerca di come fare te la lascio come "compito a casa" :-)
Luca

 Infatti il browser dovrebbe chiederti username e password con un popup.
No, il punto è proprio che dal browser non mi chiede autenticazione, e non
me ne ha mai chiesta dallo stesso spazio web. La richiesta http con dati
post che effettua wget sarà malformata. Ho provato anche a crearla a mano e
mandarla con nc:
---
POST 
http://indirizzo/postest.php
From: 
ekeho...@yahoo.it
User-Agent: Mozilla/5.0 (X11; U; Linux i686; it-IT; rv:1.8.1.1)
Gecko/20061205 Firefox/
2.0.0.1
Content-Type: application/x-www-form-urlencoded
Content-Length: 8
p1=eccom
---
Ma anche questa secondo il server è malformata. Non mi resta che sniffare la
richiesta che fa firefox e usarne una identica (Ethereal o Firebug).
C'era una classe di PEAR che permetteva di mostrare gli header http *in
entrata*, ma non mi ricordo quale...
-- 
  Narcolessico
 
http://binaryunit.blogspot.com

Dopo esperimenti con wireshark, sono arrivato alla conclusione che è un
problema del server: se invio dati post (dal browser, da pagine locali, da
remoto, con wget, con perl...) mi restituisce un http 401. Se  invio dati
post, va tutto ok senza autorizzazione.
Parlerò con l'amministratore. Grazie a tutti.
-- 
  Narcolessico
 
http://binaryunit.blogspot.com

 Se  invio dati post, va tutto ok senza autorizzazione.
Errata corrige: se NON invio dati post va tutto ok
-- 
  Narcolessico
 
http://binaryunit.blogspot.com

 problema del server:
problema?
secondo me è una semplice misura anti webbot
dovresti far girare quella pagina su un tuo server ed analizzare tutte le
variabili del form (o quel che è), di sicuro ce n'è qualcuna nascosta.
ciao

 secondo me è una semplice misura anti webbot
Non so a che pro, ma la ricezione di dati POST era disattivata in alcune
cartelle tramite htaccess. Detto a chi di dovere, aggiornato .htaccess,
funziona tutto: anche wget... -_-
-- 
  Narcolessico
 
http://binaryunit.blogspot.com

 funziona tutto: anche wget... -_-
quindi era una misura involontaria :-)