Показати заголовки запиту Curl POST? Чи є спосіб зробити це?


87

Я створюю веб-програму автоматизації Curl і маю певну проблему з тим, що не отримую бажаного результату моєї дії POST. шукав це, але все, що з’являється, - це заголовки відповідей, насправді я теж хочу їх, але також запит, про який, здається, не згадує жодна публікація, яку я знаходжу в google.

Я знаю, що можу відобразити результат запиту на завивку, використовуючи щось подібне (вибачте мене, якщо мій синтаксис вимкнений, я вже вимкнув свою віртуальну машину зі своїм 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

1
це показує лише те, що сервер надіслав назад. здається curl_setopt ($ ch, CURLOPT_VERBOSE, true); дозволить побачити, що ви надсилаєте на сервер.
Стівен Тео,

168

Ось усе, що вам потрібно:

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 немає необхідності їх збирати назад. Примітка: Значення форми розміщення надсилаються як "Дані форми", а не як заголовки, отже, чому вище їх не відображається. Якщо вам дійсно потрібно побачити, що на дроті, спробуйте WireShark.
Джозеф Луст

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, так? Чи є спосіб зробити це за допомогою просто завивки? Якщо ні, я розгляну це робити таким чином, просто я не знайомий з fputs
Рік

Це насправді рідна функціональність php
SSH

1
Це крута відповідь, оскільки вона розкриває певний необроблений запит. Мене завжди вчили користуватися cURL - це бібліотека, яку іноді доводиться встановлювати і не завжди доступна.
Altimus Prime

2

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


2
WireShark працює на WinCap або інших системах захоплення, для його роботи потрібно мати чіпсет на основі атеросів. Я думаю, чому б вам просто не встановити chrome і натиснути, Ctrl+Shift+Jпотім натиснути XHRкнопку та ім'я файлу, а потім побачити заголовки та дані.
RobertPitt

Я спробував wireshark, але, схоже, не підхоплює мій вихідний трафік Curl POST
Рік

Я припустив, що ви працюєте на локальному сервері, це так?
greg0ire

Роберте, я намагаюся зробити те, що ти сказав у Chrome, але він нічого не робить, коли роблю Ctrl + Shift + 3, я шукаю інформацію про це, але, здається, не можу знайти щось важливе, яка особливість chrome це доступ? Дякую
Рік

Добре, я знайшов це щодо перегляду заголовків у Chrome: google.com/support/forum/p/Chrome/… Я вважаю, що його Ctrl + Shift + i для доступу до цього
Рік
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.