2012-08-30 16 views
6

Sto cercando di capire il significato dei dati grezzi dei post. La pagina di manuale PHP per $HTTP_RAW_POST_DATA stabilisce che questa variabile contiene Raw POST data.Che cosa sono i dati grezzi dei post

Quando viene impostata questa variabile e qual è il significato dei dati di posta non elaborati?

Capisco la $_POST ma totalmente confuso con $HTTP_RAW_POST_DATA

+2

Hai provato a vedere cosa c'è? 'var_dump ($ HTTP_RAW_POST_DATA);' o anche meglio 'var_dump (file_get_contents (" php: // input "));' – zerkms

+0

@zerkms: Sì, è 'NULL'. Ho provato entrambi e l'output è 'NULL',' string (0) "" 'rispettivamente – Daric

+1

http://stackoverflow.com/questions/3173547/whats-the-difference-tra between-post-and-raw-post-in- php-at-all –

risposta

9

Una richiesta HTTP è costituito da due parti. Una serie di intestazioni e un corpo.

Le intestazioni includono cose come l'URL richiesto e gli helper del controllo della cache (come "Ho una versione di questo da ieri, dammene solo una nuova se ci sono modifiche, OK?").

Il corpo può essere visualizzato o meno a seconda del tipo di richiesta. Le richieste POST hanno corpi.

Il corpo può essere in qualsiasi formato desiderato dal cliente. Una delle intestazioni dirà al server qual è il formato.

Esistono un paio di formati utilizzati dai moduli HTML e PHP sa come analizzarli e inserire i dati in $_POST.

Se i dati sono in un altro formato, ad esempio JSON, o se i dati non sono conformi alle peculiarità di PHP (come le regole per avere [] alla fine di chiavi con lo stesso nome), è possibile che si desideri accedere direttamente ai dati per poterli analizzare da soli.

Questi sono i dati POST non elaborati.

+0

Spiegazione accurata! – Daric

1

HTTP è un protocollo basato su testo, in modo che tutti i dati sono passato come stringhe. Quando lavori con $_POST - hai già elaborato i dati passati affinché tu possa essere in una forma di matrice. Questo viene fatto automaticamente da PHP prima che il controllo venga passato al tuo script.

Quindi nei dati di post non elaborati c'è un dato che è stato trasmesso attraverso la rete.

probabile che si vedono i dati a=1&b=2, come si vede negli URL

+0

Grazie a @zerkms. – Daric

1

Una delle cose che puoi fare con il protocollo HTTP è fare una richiesta POST che invia del testo al server.

$HTTP_RAW_POST_DATA conterrà quel testo, indipendentemente da ciò che dice.

La maggior parte delle volte che facciamo una richiesta POST, aggiungeremo un "tipo di contenuto" al testo inviato. Questo dice al server che tipo di contenuto è. La maggior parte delle volte sul web stiamo inviando il tipo di contenuto come "application/x-www-form-urlencoded".

Quando un server riceve una richiesta POST con questo pennarello tipo di contenuto, il server sa per cercare di trasformare i dati in un array $_POST in modo che "test = ciao" diventa:

$_POST['test']='hello' 
4

$_POST può essere detto come e outcome dopo aver diviso il $HTTP_RAW_POST_DATA, php divide i dati post grezzi e formati nel modo in cui lo vediamo nel $_POST Ad esempio:

$HTTP_RAW_POST_DATA sembra qualcosa di simile

key1=value1&key2=value2 

poi $_POST sarebbe simile a questa:

$_POST = array(
    "key1" => "value1", 
    "key2" => "value2",); 
0

$HTTP_RAW_POST_DATA contiene i dati POST prime come il seguente:

  • testo
  • json
  • XML
  • html

In generale, php://input dovrebbe essere usato al posto di $HTTP_RAW_POST_DATA. perché questa funzione è stata DEPRECATED dal PHP 5.6.0. Affidarsi a questa funzione è altamente scoraggiato.

Fonte: php.net - $HTTP_RAW_POST_DATA

Problemi correlati