Wyświetlać nagłówki żądania curl POST? Czy jest na to sposób?

87

Tworzę aplikację do automatyzacji sieci Web Curl i mam problem z nie uzyskaniem pożądanego wyniku mojej akcji POST, mam problem ze zrozumieniem, jak mogę wyświetlić pełne żądanie POST, które wysyłam (z nagłówkami), ja szukałem tego, ale wszystko, co się pojawia, to nagłówki odpowiedzi, właściwie to też chcę, ale także żądanie, o którym nie wspomina żaden z postów, które znajduję w Google.

Wiem, że mogę wyświetlić wynik żądania curl, używając czegoś takiego (wybacz mi, jeśli moja składnia jest wyłączona, już zamknąłem maszynę wirtualną z moim IDE i kodem do odniesienia

 $result = curl($curl_exect) ;

W każdym razie byłbym bardzo wdzięczny za wszelkie porady dotyczące wyświetlania pełnych nagłówków, dzięki

Stóg
źródło

Odpowiedzi:

83

Możesz zobaczyć informacje dotyczące przelewu wykonując:

curl_setopt($curl_exect, CURLINFO_HEADER_OUT, true);

przed żądaniem i

$information = curl_getinfo($curl_exect);

po zgłoszeniu

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

Możesz również użyć CURLOPT_HEADERw swoimcurl_setopt

curl_setopt($curl_exect, CURLOPT_HEADER, true);

$httpcode = curl_getinfo($c, CURLINFO_HTTP_CODE);

return $httpcode == 200;

To tylko niektóre metody korzystania z nagłówków.

RobertPitt
źródło
4
Próbowałem tego, ale po prostu wysyła tablicę POST, więc nie pokazuje dokładnych nagłówków, tylko POST, a nie dokładnie tak, jak widzi to serwer odbierający, więc nie jest to idealne rozwiązanie do rozwiązywania problemów
Rick
5
Odpowiedź nie jest kompletna. Zanim żądanie zostanie wykonane, musiszcurl_setopt($curl_exect, CURLINFO_HEADER_OUT, true);
naitsirch
1
pokazuje tylko, co serwer odesłał. wygląda na to, że curl_setopt ($ ch, CURLOPT_VERBOSE, true); pozwoli Ci zobaczyć, co wysyłasz na serwer.
Steven Teo
169

Oto wszystko, czego potrzebujesz:

curl_setopt($curlHandle, CURLINFO_HEADER_OUT, true); // enable tracking
... // do curl request    
$headerSent = curl_getinfo($curlHandle, CURLINFO_HEADER_OUT ); // request headers
Joseph Lust
źródło
6
Jak można wyświetlić również dane POST? To znaczy dodane przez curl_setopt ($ ch, CURLOPT_POSTFIELDS, $ postData);
Dan Dascalescu,
@DanDascalescu Ponieważ przesłałeś dane, podczas tworzenia żądania Curl nie ma potrzeby ich ponownego przechwytywania. Uwaga: Wartości formularzy POST są wysyłane jako „Dane formularza”, a nie jako nagłówki, dlatego powyższe nie pokazuje ich. Jeśli naprawdę chcesz zobaczyć, co jest na kablu, wypróbuj WireShark.
Joseph Lust
10

Możesz zapisać wszystkie nagłówki wysłane przez curl do pliku za pomocą:

$f = fopen('request.txt', 'w');
curl_setopt($ch,CURLOPT_VERBOSE,true);
curl_setopt($ch,CURLOPT_STDERR ,$f);
Nassim Aouragh
źródło
6

Możesz samodzielnie zażądać nagłówków, używając:

// 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);

Jak napisane o tym, jak złożyć wniosek

Liutas
źródło
Dzięki za post, myślę, że nie do końca rozumiem to, ponieważ jest to inna biblioteka niż curl, prawda? Czy istnieje sposób, aby to zrobić za pomocą samego zwijania? Jeśli nie, przyjrzę się temu w ten sposób, po prostu nie jestem zaznajomiony z fputami
Rick
W rzeczywistości jest to natywna funkcjonalność php
SSH
1
To fajna odpowiedź, ponieważ odsłania surowe żądanie. Zawsze uczono mnie używania cURL, który jest biblioteką, która czasami musi być zainstalowana i nie zawsze jest dostępna.
Altimus Prime
2

Ostatnio miałem dokładnie ten sam problem i zainstalowałem Wireshark (jest to narzędzie do monitorowania sieci). Możesz zobaczyć wszystko, z wyjątkiem zaszyfrowanego ruchu (HTTPS).

greg0ire
źródło
2
WireShark działa na WinCap lub innym systemie przechwytywania, musisz mieć chipset oparty na atheros, aby działał. Myślę, dlaczego nie po prostu zainstalować chrome i nacisnąć, Ctrl+Shift+Ja następnie kliknąć XHRprzycisk i nazwę pliku, a następnie zobaczyć nagłówki i dane.
RobertPitt,
Próbowałem wireshark, ale wydaje się, że nie odbiera wychodzącego ruchu Curl POST
Rick,
Zakładałem, że pracujesz na lokalnym serwerze, czy tak jest?
greg0ire
Robert, próbuję zrobić to, co powiedziałeś w Chrome, ale nic nie robię, gdy robię Ctrl + Shift + 3, szukam informacji na ten temat, ale nie mogę znaleźć czegoś odpowiedniego, jaka funkcja Chrome czy to ma dostęp? Dzięki
Rick,
Ok, znalazłem to w związku z przeglądaniem nagłówków w Chrome: google.com/support/forum/p/Chrome/ ... Uważam, że to Ctrl + Shift + i, aby uzyskać dostęp do tego
Rick,