Tampilkan Header Permintaan Curl POST? Apakah ada cara untuk melakukan ini?

87

Saya sedang membangun aplikasi otomatisasi web Curl dan mengalami beberapa masalah dengan tidak mendapatkan hasil yang diinginkan dari tindakan POST saya, saya mengalami beberapa masalah dalam mencari tahu bagaimana saya dapat menampilkan permintaan POST lengkap yang saya kirimkan (dengan header), saya telah mencari ini tetapi semua yang muncul adalah header tanggapan, sebenarnya saya menginginkan ini juga tetapi juga permintaan, yang tampaknya tidak ada pos yang saya temukan di google yang menyebutkan ..

Saya tahu saya dapat menampilkan hasil permintaan curl menggunakan sesuatu seperti ini (maafkan saya jika sintaks saya mati, saya sudah mematikan mesin virtual saya dengan ide dan kode saya untuk merujuk

 $result = curl($curl_exect) ;

Bagaimanapun, saya akan sangat menghargai saran apa pun tentang cara melihat header lengkap, terima kasih

Rick
sumber

Jawaban:

83

Anda dapat melihat informasi mengenai transfer dengan melakukan:

curl_setopt($curl_exect, CURLINFO_HEADER_OUT, true);

sebelum permintaan, dan

$information = curl_getinfo($curl_exect);

setelah permintaan

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

Anda juga dapat menggunakan CURLOPT_HEADERdicurl_setopt

curl_setopt($curl_exect, CURLOPT_HEADER, true);

$httpcode = curl_getinfo($c, CURLINFO_HTTP_CODE);

return $httpcode == 200;

Ini hanyalah beberapa metode penggunaan header.

RobertPitt
sumber
4
Saya mencoba ini tetapi hanya menampilkan array POST sehingga tidak menampilkan header yang tepat, hanya POST dan tidak persis seperti yang dilihat server penerima sehingga tidak ideal untuk pemecahan masalah
Rick
5
Jawabannya belum lengkap. Sebelum permintaan dieksekusi, Anda haruscurl_setopt($curl_exect, CURLINFO_HEADER_OUT, true);
naitsirch
1
ini hanya menunjukkan apa yang dikirim kembali oleh server. sepertinya curl_setopt ($ ch, CURLOPT_VERBOSE, true); akan memungkinkan Anda untuk melihat apa yang Anda kirim ke server.
Steven Teo
169

Inilah yang Anda butuhkan:

curl_setopt($curlHandle, CURLINFO_HEADER_OUT, true); // enable tracking
... // do curl request    
$headerSent = curl_getinfo($curlHandle, CURLINFO_HEADER_OUT ); // request headers
Joseph Lust
sumber
6
Bagaimana cara menampilkan data POST juga? Yaitu yang ditambahkan oleh curl_setopt ($ ch, CURLOPT_POSTFIELDS, $ postData);
Dan Dascalescu
@DanDascalesu Karena Anda telah melakukan POSTING terhadap data, saat membuat permintaan Curl, tidak perlu mengambilnya kembali. Catatan: Nilai formulir POSTing dikirim sebagai "Data Formulir", bukan header, oleh karena itu mengapa hal di atas tidak menampilkannya. Jika Anda benar-benar perlu melihat apa yang ada di kawat, coba WireShark.
Joseph Lust
10

Anda dapat menyimpan semua header yang dikirim oleh curl ke file menggunakan:

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

Anda dapat meminta tajuk sendiri menggunakan:

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

Seperti yang tertulis tentang bagaimana membuat permintaan

Liutas
sumber
Terima kasih atas kirimannya, saya kira saya tidak sepenuhnya memahami ini karena ini perpustakaan yang berbeda dari curl, bukan? Apakah ada cara untuk melakukan ini hanya dengan ikal? Jika tidak, saya akan mempertimbangkan melakukannya dengan cara ini, hanya saja saya tidak terbiasa dengan fput
Rick
Ini sebenarnya adalah fungsionalitas asli dari php
SSH
1
Ini adalah jawaban yang bagus karena memperlihatkan jenis permintaan mentah. Saya selalu diajari untuk menggunakan cURL yang merupakan pustaka yang terkadang harus diinstal dan tidak selalu tersedia.
Altimus Prime
2

Saya mengalami masalah yang persis sama belakangan ini, dan saya menginstal Wireshark (ini adalah alat pemantau jaringan). Anda dapat melihat semuanya dengan ini, kecuali lalu lintas terenkripsi (HTTPS).

greg0ire
sumber
2
WireShark berjalan pada WinCap atau sistem penangkapan lainnya, Anda harus memiliki chipset berbasis atheros agar dapat berfungsi Saya pikir, mengapa Anda tidak menginstal chrome dan tekan Ctrl+Shift+Jkemudian klik XHRTombol dan nama file dan kemudian lihat header dan data.
RobertPitt
Saya mencoba wireshark tetapi tampaknya tidak menangkap lalu lintas Curl POST saya yang keluar
Rick
Saya berasumsi bahwa Anda bekerja di server lokal, apakah itu masalahnya?
greg0ire
Robert, saya mencoba melakukan apa yang Anda katakan di Chrome, tetapi tidak melakukan apa-apa ketika saya melakukan Ctrl + Shift + 3, saya mencari info tentang ini tetapi tidak dapat menemukan sesuatu yang relevan, fitur chrome apa apakah ini mengakses? Terima kasih
Rick
Oke, saya menemukan ini terkait melihat tajuk di Chrome: google.com/support/forum/p/Chrome/… Saya yakin Ctrl + Shift + i untuk mengakses ini
Rick