Mostrare le intestazioni della richiesta POST Curl? C'è un modo per fare questo?


87

Sto costruendo un'app di automazione web Curl e ho qualche problema con il fatto che non riesco a ottenere il risultato desiderato della mia azione POST, ho qualche problema a capire come posso mostrare la richiesta POST completa che sto inviando (con le intestazioni), io ho cercato su questo ma tutto ciò che viene fuori sono le intestazioni di risposta, in realtà voglio anche queste ma anche la richiesta, che nessuno dei post che trovo su google sembra menzionare ..

So di poter visualizzare il risultato di una richiesta di ricciolo usando qualcosa di simile (perdonami se la mia sintassi è disattivata, ho già spento la mia macchina virtuale con il mio ide e il codice a cui fare riferimento

 $result = curl($curl_exect) ;

Ad ogni modo, apprezzerei molto qualsiasi consiglio su come visualizzare le intestazioni complete, grazie


Risposte:


83

Puoi visualizzare le informazioni riguardanti il ​​trasferimento facendo:

curl_setopt($curl_exect, CURLINFO_HEADER_OUT, true);

prima della richiesta, e

$information = curl_getinfo($curl_exect);

dopo la richiesta

Visualizza: http://www.php.net/manual/en/function.curl-getinfo.php

Puoi anche usare CURLOPT_HEADERnel tuo filecurl_setopt

curl_setopt($curl_exect, CURLOPT_HEADER, true);

$httpcode = curl_getinfo($c, CURLINFO_HTTP_CODE);

return $httpcode == 200;

Questi sono solo alcuni metodi per utilizzare le intestazioni.


4
Ho provato questo ma emette solo un array del POST, quindi non mostra le intestazioni esatte, solo il POST e non esattamente come lo vedrebbe il server ricevente, quindi non è l'ideale per la risoluzione dei problemi
Rick

5
La risposta non è completa. Prima che la richiesta venga eseguita, devicurl_setopt($curl_exect, CURLINFO_HEADER_OUT, true);
naitsirch

1
questo mostra solo ciò che il server ha restituito. sembra curl_setopt ($ ch, CURLOPT_VERBOSE, true); ti permetterà di vedere cosa invii al server.
Steven Teo

169

Ecco tutto ciò di cui hai bisogno:

curl_setopt($curlHandle, CURLINFO_HEADER_OUT, true); // enable tracking
... // do curl request    
$headerSent = curl_getinfo($curlHandle, CURLINFO_HEADER_OUT ); // request headers

6
Come si possono mostrare anche i dati POST? Cioè quello aggiunto da curl_setopt ($ ch, CURLOPT_POSTFIELDS, $ postData);
Dan Dascalescu

@DanDascalescu Poiché hai inviato i dati, quando crei la richiesta Curl, non è necessario catturarli nuovamente. Nota: i valori del modulo POST vengono inviati come "Dati modulo", non intestazioni, motivo per cui quanto sopra non li mostra. Se hai davvero bisogno di vedere cosa c'è sul filo, prova WireShark.
Joseph Lust

10

Puoi salvare tutte le intestazioni inviate da curl in un file usando:

$f = fopen('request.txt', 'w');
curl_setopt($ch,CURLOPT_VERBOSE,true);
curl_setopt($ch,CURLOPT_STDERR ,$f);

6

Puoi farti richiedere le intestazioni da solo usando:

// open a socket connection on port 80
$fp = fsockopen($host, 80);

// send the request headers:
fputs($fp, "POST $path HTTP/1.1\r\n");
fputs($fp, "Host: $host\r\n");
fputs($fp, "Referer: $referer\r\n");
fputs($fp, "Content-type: application/x-www-form-urlencoded\r\n");
fputs($fp, "Content-length: ". strlen($data) ."\r\n");
fputs($fp, "Connection: close\r\n\r\n");
fputs($fp, $data);

$result = ''; 
while(!feof($fp)) {
    // receive the results of the request
    $result .= fgets($fp, 128);
}

// close the socket connection:
fclose($fp);

Come scritto su come fare richiesta


Grazie per il post, immagino di non capirlo appieno perché è una libreria diversa da curl, giusto? C'è un modo per farlo con il solo ricciolo? In caso contrario, cercherò di farlo in questo modo, è solo che non ho familiarità con gli fput
Rick

Questa è in realtà una funzionalità nativa di php
SSH Questo

1
Questa è una risposta interessante perché espone il tipo di richiesta grezza. Mi è sempre stato insegnato a usare cURL che è una libreria che a volte deve essere installata e non è sempre disponibile.
Altimus Prime

2

Ultimamente ho avuto esattamente lo stesso problema e ho installato Wireshark (è uno strumento di monitoraggio della rete). Puoi vedere tutto con questo, tranne il traffico crittografato (HTTPS).


2
WireShark gira su WinCap o un altro sistema di acquisizione, devi avere un chipset basato su atheros perché funzioni, penso, perché non devi solo installare Chrome e premere Ctrl+Shift+Jquindi fare clic sul XHRpulsante e il nome del file e quindi vedere intestazioni e dati.
RobertPitt

Ho provato WireShark ma non sembra raccogliere il mio traffico POST Curl in uscita
Rick

Ho pensato che stessi lavorando su un server locale, è così?
greg0ire

Robert, sto cercando di fare quello che hai detto in Chrome, ma non sta facendo nulla quando faccio Ctrl + Maiusc + 3, cerco informazioni su questo ma non riesco a trovare qualcosa di rilevante, quale caratteristica di Chrome sta accedendo? Grazie
Rick

Ok, ho trovato questo per quanto riguarda la visualizzazione delle intestazioni in Chrome: google.com/support/forum/p/Chrome/… Credo che sia Ctrl + Maiusc + i per accedervi
Rick
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.