Показать заголовки запроса POST Curl? Есть ли способ сделать это?

87

Я создаю приложение для веб-автоматизации Curl, и у меня возникла проблема с получением желаемого результата моего действия POST, у меня возникли проблемы с выяснением того, как я могу показать полный запрос POST, который я отправляю (с заголовками), я искали по этому поводу, но все, что появляется, - это заголовки ответов, на самом деле я тоже хочу их, но также и запрос, который, похоже, не упоминается ни в одном из сообщений, которые я нахожу в Google.

Я знаю, что могу отобразить результат запроса curl, используя что-то вроде этого (простите меня, если мой синтаксис отключен, я уже выключил свою виртуальную машину с помощью своего ide и кода для ссылки на

 $result = curl($curl_exect) ;

В любом случае, я был бы очень признателен за любой совет о том, как просмотреть полные заголовки, спасибо

Рик
источник
Возможный дубликат: stackoverflow.com/questions/866946/…

Ответы:

83

Вы можете просмотреть информацию о переводе, выполнив:

curl_setopt($curl_exect, CURLINFO_HEADER_OUT, true);

перед запросом и

$information = curl_getinfo($curl_exect);

после запроса

Просмотр: http://www.php.net/manual/en/function.curl-getinfo.php

Вы также можете использовать CURLOPT_HEADERв своемcurl_setopt

curl_setopt($curl_exect, CURLOPT_HEADER, true);

$httpcode = curl_getinfo($c, CURLINFO_HTTP_CODE);

return $httpcode == 200;

Это всего лишь несколько способов использования заголовков.

Роберт Питт
источник
4
Я пробовал это, но он просто выводит массив POST, поэтому он не показывает точные заголовки, только POST, а не точно так, как его видел бы принимающий сервер, поэтому он не идеален для устранения неполадок
Рик
5
Ответ неполный. Прежде чем запрос будет выполнен, вы должныcurl_setopt($curl_exect, CURLINFO_HEADER_OUT, true);
naitsirch 09
1
это показывает только то, что сервер отправил обратно. похоже на curl_setopt ($ ch, CURLOPT_VERBOSE, true); позволит вам увидеть, что вы отправляете на сервер.
Стивен Тео
169

Вот все, что вам нужно:

curl_setopt($curlHandle, CURLINFO_HEADER_OUT, true); // enable tracking
... // do curl request    
$headerSent = curl_getinfo($curlHandle, CURLINFO_HEADER_OUT ); // request headers
Джозеф похоть
источник
6
Как можно также показать данные POST? Т.е. то, что добавлено curl_setopt ($ ch, CURLOPT_POSTFIELDS, $ postData);
Дэн Даскалеску
@DanDascalescu Поскольку вы разместили данные при создании запроса Curl, нет необходимости возвращать их. Примечание. Значения формы POSTing отправляются как «данные формы», а не заголовки, поэтому в приведенном выше примере они не отображаются. Если вам действительно нужно посмотреть, что происходит в сети, попробуйте WireShark.
Joseph Lust
10

Вы можете сохранить все заголовки, отправленные curl, в файл, используя:

$f = fopen('request.txt', 'w');
curl_setopt($ch,CURLOPT_VERBOSE,true);
curl_setopt($ch,CURLOPT_STDERR ,$f);
Нассим Аураг
источник
6

Вы можете запросить заголовки самостоятельно, используя:

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

Как написать, как сделать запрос

Лютас
источник
Спасибо за пост, думаю, я не совсем понимаю это, так как это другая библиотека, чем curl, верно? Есть ли способ сделать это с помощью curl? Если нет, я посмотрю, как это сделать, просто я не знаком с fputs
Рик
На самом деле это встроенная функциональность php
SSH
1
Это крутой ответ, потому что он предоставляет необработанный запрос. Меня всегда учили использовать cURL - библиотеку, которую иногда нужно устанавливать, но она не всегда доступна.
Altimus Prime
2

В последнее время у меня была точно такая же проблема, и я установил Wireshark (это инструмент для мониторинга сети). Вы можете видеть все, кроме зашифрованного трафика (HTTPS).

greg0ire
источник
2
WireShark работает на WinCap или других системах захвата, у вас должен быть чипсет на базе Atheros, чтобы он работал, я думаю, почему бы вам просто не установить Chrome и нажать, Ctrl+Shift+Jзатем нажать XHRкнопку и имя файла, а затем просмотреть заголовки и данные.
RobertPitt 02
Я попробовал wirehark, но, похоже, он не улавливает мой исходящий трафик Curl POST
Рик
Я предположил, что вы работали на локальном сервере, так ли это?
greg0ire 02
Роберт, я пытаюсь сделать то, что вы сказали в Chrome, но он ничего не делает, когда нажимаю Ctrl + Shift + 3, я ищу информацию по этому поводу, но не могу найти что-то подходящее, какая функция Chrome это доступ? Спасибо
Рик
Хорошо, я нашел это относительно просмотра заголовков в Chrome: google.com/support/forum/p/Chrome/… Я считаю, что для доступа к этому нужно использовать Ctrl + Shift + i
Рик