Visualizzazione risultati 1 fino 15 di 15
Like Tree1Likes
  • 1 Post By javascripter

Discussione: Esempio di richiesta HTTP POST

  1. #1
    L'avatar di foreach
    foreach non è connesso Altervistiano Junior
    Data registrazione
    11-06-2008
    Residenza
    3 metri sotto terra
    Messaggi
    501

    Predefinito Esempio di richiesta HTTP POST

    Ciao a tutti,

    scrivo in questa sezione perché si chiama PHP, MySql e Apache, e quello che vorrei sapere riguarda Apache, in particolare le richieste HTTP POST.

    Se ho capito bene, ci sono 2 categorie di richieste POST, quella di solo testo e quella dove alleghi un file.

    Qualcuno può gentilmente farmi esempi di queste richieste (comando, intestazioni e corpo)?


    Grazie,
    foreach
    Codice PHP:
    foreach($vettore as $chiave => $valore) {
    echo 
    "Ciao";


  2. #2
    L'avatar di javascripter
    javascripter non è connesso Moderatore
    Data registrazione
    14-02-2010
    Messaggi
    1,114

    Predefinito

    Tra le due richieste cambia il Content-Type, ovvero l'intestazione che descrive il corpo (body) della richiesta e il corpo stesso.

    Una richiesta di tipo POST `semplice`, di tipo x-www-form-urlencoded, è così strutturata:
    Codice:
    POST /path/script.php HTTP/1.0
    Content-Type: application/x-www-form-urlencoded
    
    arg1=val1&arg2=val2&arg3=val
    Il corpo puoi pensarlo come la query string di una richiesta GET. Ovviamente i caratteri speciali hanno bisogno di essere convertiti nel formato %HH.

    Una richiesta di tipo multipart/form-data, consente di allegare nel corpo dei file.
    Ogni file (parte) ha la sua intestazione e corpo. È distinguibile dagli altri attraverso un separatore detto `boundary`, che si specifica nel Content-Type.
    Un esempio in cui si allegano alcuni file txt:
    Codice:
    POST /path/script.php HTTP/1.0
    Content-Type: multipart/form-data; boundary=separatore
    
    qualsiasi cosa qui, è ignorata
    --separatore
    Content-Disposition: form-data; name="file1"; filename="file1.txt"
    Content-Type: text/plain
    
    contenuto file1.
    --separatore
    Content-Disposition: form-data; name="file2"; filename="file2.txt"
    Content-Type: text/plain
    
    contenuto file2.
    
    --separatore--
    anche qui, qualsiasi cosa sarà ignorata
    Il boundary deve essere qualcosa di casuale, altrimenti qualsiasi file ASCII che contenga --separatore o --separatore--, potrebbe terminare il file o la richiesta prima della reale fine.
    Non ricordo bene ma ci dovrebbero esserci alcune regole per generarlo.

    Questi esempi sono da arricchire con altre intestazioni, ad esempio Content-Length ed altre intestazioni che aggiunge automaticamente il browser (codifica accettata, lingua, user agent, etc.).
    Essendo degli esempi che ho scritto al momento, non ho testato il loro funzionamento ma rappresentano la struttura delle richieste.

    Per approfondire l'argomento puoi leggere le seguenti pagine:
    karl94 likes this.

  3. #3
    L'avatar di foreach
    foreach non è connesso Altervistiano Junior
    Data registrazione
    11-06-2008
    Residenza
    3 metri sotto terra
    Messaggi
    501

    Predefinito

    Inanzitutto grazie per la risposta esauriente

    Ho ancora qualche domanda:

    1) posso usare il protocollo HTTP/1.1?
    2) com'è una richiesta mista di campi input testuali e file allegati?





    Grazie,
    foreach
    Codice PHP:
    foreach($vettore as $chiave => $valore) {
    echo 
    "Ciao";


  4. #4
    L'avatar di javascripter
    javascripter non è connesso Moderatore
    Data registrazione
    14-02-2010
    Messaggi
    1,114

    Predefinito

    Citazione Originalmente inviato da foreach Visualizza messaggio
    1) posso usare il protocollo HTTP/1.1?
    Certo.
    Citazione Originalmente inviato da foreach Visualizza messaggio
    2) com'è una richiesta mista di campi input testuali e file allegati?
    In una richiesta multipart/form-data, ogni parte (separata dal boundary) ha il suo nome, specificato nel Content-Description.
    Quel nome fa proprio riferimento all'attributo name specificato nei form html.
    Quindi per specificare i campi testuali, devi inserire tante parti tanti quanto sono i campi, ognuno contraddistinto da un nome diverso.
    Riscrivo l'esempio precedente, completandolo:
    Codice:
    POST /path/script.php HTTP/1.0
    Content-Type: multipart/form-data; boundary=separatore
    
    qualsiasi cosa qui, è ignorata
    --separatore
    Content-Disposition: form-data; name="file1"; filename="file1.txt"
    Content-Type: text/plain
    
    contenuto file1.
    --separatore
    Content-Disposition: form-data; name="file2"; filename="file2.txt"
    Content-Type: text/plain
    
    contenuto file2.
    --separatore
    Content-Disposition: form-data; name="cognome"
    
    Rossi
    --separatore
    Content-Disposition: form-data; name="data_nascita"
    
    30/07/1982
    --separatore--
    anche qui, qualsiasi cosa sarà ignorata

  5. #5
    L'avatar di foreach
    foreach non è connesso Altervistiano Junior
    Data registrazione
    11-06-2008
    Residenza
    3 metri sotto terra
    Messaggi
    501

    Predefinito

    Grazie ancora javascripter.

    Ho ancora altre domande:

    1) dove aggiungo le altre intestazioni che devo mettere?
    2) devo perforza metterle in ordine alfabetico?
    3) devo perforza mettere Content-Length?


    Grazie,
    foreach
    Codice PHP:
    foreach($vettore as $chiave => $valore) {
    echo 
    "Ciao";


  6. #6
    L'avatar di javascripter
    javascripter non è connesso Moderatore
    Data registrazione
    14-02-2010
    Messaggi
    1,114

    Predefinito

    Citazione Originalmente inviato da foreach Visualizza messaggio
    1) dove aggiungo le altre intestazioni che devo mettere?
    puoi aggiungerle in una parte qualunque dell'header della richiesta (subito dopo la request line: POST <path> HTTP/<version>).
    Citazione Originalmente inviato da foreach Visualizza messaggio
    2) devo perforza metterle in ordine alfabetico?
    no, l'ordine non conta.
    Citazione Originalmente inviato da foreach Visualizza messaggio
    3) devo perforza mettere Content-Length?
    Non dovrebbe essere obbligatoria, ma è preferibile aggiungere questa intestazione.
    Permette di capire ai server che riceveranno la richiesta quanti dati dovranno ricevere e gestire.

    Nelle specifiche di HTTP/1.1 viene detto:
    Citazione Originalmente inviato da http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.13
    In HTTP, it SHOULD be sent whenever the message's length can be determined prior to being transferred
    traduzione: in HTTP (Content-Length),dovrebbe essere inviato tutte le volte che la lunghezza del messaggio può essere determinata prima che esso sia trasferito

  7. #7
    L'avatar di foreach
    foreach non è connesso Altervistiano Junior
    Data registrazione
    11-06-2008
    Residenza
    3 metri sotto terra
    Messaggi
    501

    Predefinito

    Quindi il parametro Content-Length va messo per indicare al server quant'è lunga la richiesta nel caso si interrompe la connessione e non va a buon fine?

    Altre domande:
    1) il parametro Content-Length include anche la lunghezza delle intestazioni e della linea di comando?
    2) c'è un programmino (magari console) che mi permetta di provare qualche richiesta e mi fa vedere la risposta?

    L'importante che questo programmino non sia hurl.it perché alcune intestazioni le aggiunge lui e io voglio provare senza, poi se questo programma è un eseguibile e non sul web è meglio.


    Grazie,
    foreach
    Codice PHP:
    foreach($vettore as $chiave => $valore) {
    echo 
    "Ciao";


  8. #8
    L'avatar di javascripter
    javascripter non è connesso Moderatore
    Data registrazione
    14-02-2010
    Messaggi
    1,114

    Predefinito

    Citazione Originalmente inviato da foreach Visualizza messaggio
    Quindi il parametro Content-Length va messo per indicare al server quant'è lunga la richiesta nel caso si interrompe la connessione e non va a buon fine?
    Tecnicamente non so come funziona, la connessione interrotta può essere gestita a livello più basso immagino (TCP).
    Potrebbe essere usato anche per prevenire l'upload di file troppo grandi.

    Citazione Originalmente inviato da foreach Visualizza messaggio
    1) il parametro Content-Length include anche la lunghezza delle intestazioni e della linea di comando?
    no, è solo la dimensione del body.

    Citazione Originalmente inviato da foreach Visualizza messaggio
    2) c'è un programmino (magari console) che mi permetta di provare qualche richiesta e mi fa vedere la risposta?
    Puoi usare un software di packet sniffer e filtrare i pacchetti HTTP.
    Tra i più famosi c'è wireshark.

    Oppure puoi usare una qualsiasi estensione per il tuo browser; httpfox se usi firefox, ma ce ne sono davvero tante e sono più o meno equivalenti.

  9. #9
    L'avatar di foreach
    foreach non è connesso Altervistiano Junior
    Data registrazione
    11-06-2008
    Residenza
    3 metri sotto terra
    Messaggi
    501

    Predefinito

    Questo wireshark mi permette di scrivere la richiesta in una casella di testo e inviarla? E magari di vedere il risultato in un'altra casella di testo? (una cosa come la console terminale)

    Io vorrei una cosa tipo Putty, solo che provando una semplice "GET / HTTP/1.0" e premendo invio, si chiude Putty, invece mi servirebbe una cosa simile, basta che mi permette di premere invio non per inviare, ma per andare a capo e che mi visualizzi la risposta.



    Grazie,
    foreach
    Codice PHP:
    foreach($vettore as $chiave => $valore) {
    echo 
    "Ciao";


  10. #10
    L'avatar di javascripter
    javascripter non è connesso Moderatore
    Data registrazione
    14-02-2010
    Messaggi
    1,114

    Predefinito

    Citazione Originalmente inviato da foreach Visualizza messaggio
    Questo wireshark mi permette di scrivere la richiesta in una casella di testo e inviarla? E magari di vedere il risultato in un'altra casella di testo? (una cosa come la console terminale)

    Io vorrei una cosa tipo Putty, solo che provando una semplice "GET / HTTP/1.0" e premendo invio, si chiude Putty, invece mi servirebbe una cosa simile, basta che mi permette di premere invio non per inviare, ma per andare a capo e che mi visualizzi la risposta.



    Grazie,
    foreach
    No, wireshark ti permette di tenere traccia dei pacchetti in entrata e in uscita passanti per un dispositivo di rete (locale).
    Nel tuo caso devi usare un client telnet. Putty ne implementa uno, mi pare.

    Inoltre, ci sono dei programmi che ti permettono di costruire richieste HTTP, vedi curl o wget.
    Ultima modifica di javascripter : 13-06-2015 alle ore 12.56.00

  11. #11
    L'avatar di foreach
    foreach non è connesso Altervistiano Junior
    Data registrazione
    11-06-2008
    Residenza
    3 metri sotto terra
    Messaggi
    501

    Predefinito

    Citazione Originalmente inviato da javascripter Visualizza messaggio
    Putty ne implementa uno, mi pare.
    Putty non va, come tento di connettermi ad un server sulla porta 80 con tipo di connessione telnet, si richiude.
    Citazione Originalmente inviato da javascripter Visualizza messaggio
    Inoltre, ci sono dei programmi che ti permettono di costruire richieste HTTP, vedi curl o wget.
    Non mi serve un programma per costruire le richieste, almeno per ora. Per ora voglio scriverle io e vedere che risultato mi danno.

    Non c'è qualcosa di buono come Putty?


    Grazie,
    foreach
    Codice PHP:
    foreach($vettore as $chiave => $valore) {
    echo 
    "Ciao";


  12. #12
    L'avatar di javascripter
    javascripter non è connesso Moderatore
    Data registrazione
    14-02-2010
    Messaggi
    1,114

    Predefinito

    Citazione Originalmente inviato da foreach Visualizza messaggio
    Putty non va, come tento di connettermi ad un server sulla porta 80 con tipo di connessione telnet, si richiude.

    Non mi serve un programma per costruire le richieste, almeno per ora. Per ora voglio scriverle io e vedere che risultato mi danno.

    Non c'è qualcosa di buono come Putty?


    Grazie,
    foreach
    Putty non viene distribuito con il client telnet, quindi dovresti scaricarlo (sempre dal sito `ufficiale`).
    Se continua a non funzionare, prova il client di windows installabile dal pannello di controllo (programmi > aggiungi o rimuovi funzionalità di windows > client telnet).

    In ogni caso, ho sempre avuto problemi ad usare telnet + http su windows.
    Forse faresti meglio ad usare una distribuzione linux (anche una live minimale).

    Lo dico giusto come possibile (ma improbabile) soluzione per windows, se vuoi scriverti tu un programmino per questo genere di operazioni, puoi sempre usare un qualsiasi linguaggio e le socket.

  13. #13
    L'avatar di foreach
    foreach non è connesso Altervistiano Junior
    Data registrazione
    11-06-2008
    Residenza
    3 metri sotto terra
    Messaggi
    501

    Predefinito

    Citazione Originalmente inviato da javascripter Visualizza messaggio
    Putty non viene distribuito con il client telnet, quindi dovresti scaricarlo (sempre dal sito `ufficiale`).
    Io l'ho scaricato dal sito ufficiale putty.org che mi rinvia a questa pagina, ma comunque aprendo il terminale su un IP di un server e la porta 80, si richiude immediatamente.
    Citazione Originalmente inviato da javascripter Visualizza messaggio
    Se continua a non funzionare, prova il client di windows installabile dal pannello di controllo (programmi > aggiungi o rimuovi funzionalità di windows > client telnet).
    L'ho installato, ma premendo h o ? (i comandi di aiuto), non vedo come fare a inviare richieste HTTP.
    Citazione Originalmente inviato da javascripter Visualizza messaggio
    Forse faresti meglio ad usare una distribuzione linux (anche una live minimale).
    Ce l'ho, proprio su questo pc ho installato Ubuntu 14.04, se si può fare qualcosa su linux per me è pure meglio.
    Citazione Originalmente inviato da javascripter Visualizza messaggio
    Lo dico giusto come possibile (ma improbabile) soluzione per windows, se vuoi scriverti tu un programmino per questo genere di operazioni, puoi sempre usare un qualsiasi linguaggio e le socket.
    Un piccolo modulo di Visual Basic intendi?

    Io ho già dei file di testo salvati contenenti le richieste GET e POST da provare, ma mi serve qualcosa che inserisco la richiesta, premo Invio, e mi visualizza il risultato.


    Grazie,
    foreach
    Codice PHP:
    foreach($vettore as $chiave => $valore) {
    echo 
    "Ciao";


  14. #14
    L'avatar di javascripter
    javascripter non è connesso Moderatore
    Data registrazione
    14-02-2010
    Messaggi
    1,114

    Predefinito

    La sintassi per connettersi direttamente ad un host è telnet host porta.
    Dopo di che, potrai digitare la richiesta HTTP.

  15. #15
    L'avatar di foreach
    foreach non è connesso Altervistiano Junior
    Data registrazione
    11-06-2008
    Residenza
    3 metri sotto terra
    Messaggi
    501

    Predefinito

    Questo lo intendi da un terminale di ubuntu?



    foreach
    Codice PHP:
    foreach($vettore as $chiave => $valore) {
    echo 
    "Ciao";


Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •