Saya ingin melihat header permintaan yang dibuat curlketika saya mengirim permintaan ke server. Bagaimana saya bisa memeriksanya?
Saya ingin melihat header permintaan yang dibuat curlketika saya mengirim permintaan ke server. Bagaimana saya bisa memeriksanya?
Jawaban:
Saya pikir curl -vpaling mudah. Ini akan memuntahkan header permintaan (baris yang diawali dengan '>') tanpa harus menulis ke file:
$ curl -v -I -H "Testing: Test header so you see this works" http://stackoverflow.com/
* About to connect() to stackoverflow.com port 80 (#0)
* Trying 69.59.196.211... connected
* Connected to stackoverflow.com (69.59.196.211) port 80 (#0)
> HEAD / HTTP/1.1
> User-Agent: curl/7.16.3 (i686-pc-cygwin) libcurl/7.16.3 OpenSSL/0.9.8h zlib/1.2.3 libssh2/0.15-CVS
> Host: stackoverflow.com
> Accept: */*
> Testing: Test header so you see this works
>
< HTTP/1.0 200 OK
...
curl -Ivs http://example.com > /dev/null: -Iuntuk HEADpermintaan, -vmenampilkan tajuk yang dikirim, -smenyembunyikan bilah progres, > /dev/nullhanya menampilkan keluaran -v, menghindari duplikasi.
-D -rapi, tetapi tidak berguna bagi saya karena hanya menduplikasi header yang -vsudah ditampilkan. Jika Anda ingin mereka tidak diperbaiki untuk konsumsi mesin otomatis, maka mungkin akan lebih baik dalam hal itu, tapi saya hanya ingin melihat apa masalah yang lebih detail.
curl -v https://www.example.com; kedua, itu juga mencetak CONNECTpermintaan jika Anda mengunjungi situs melalui proxy HTTP , seperti curl --proxy my-proxy:8080 http://www.example.com. Saya percaya ini akan membantu lebih banyak pengguna jika beberapa contoh dari dua fitur ini disebutkan dalam jawaban ini.
-I Di dunia modern, ketika orang bertanya tentang melihat header, mereka mungkin berbicara tentang API. Dan jika Anda menggunakan -Imentalitas "Saya gunakan untuk melihat header dengan server web Apache saya", Anda akan membuang banyak waktu untuk mengembangkan suatu HEADmetode ketika Anda mungkin bermaksud menggunakannya GET. Berhentilah memberi tahu orang untuk menggunakan -I. Jika mereka mau HEAD, gunakan -X HEAD(TWSS)
Pertanyaannya tidak menentukan apakah perintah baris perintah bernama curldimaksudkan atau seluruh pustaka cURL.
Kode PHP berikut ini menggunakan pustaka cURL menggunakan parameter pertama sebagai metode HTTP (mis. "GET", "POST", "OPTIONS") dan parameter kedua sebagai URL.
<?php
$ch = curl_init();
$f = tmpfile(); # will be automatically removed after fclose()
curl_setopt_array($ch, array(
CURLOPT_CUSTOMREQUEST => $argv[1],
CURLOPT_URL => $argv[2],
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_FOLLOWLOCATION => 0,
CURLOPT_VERBOSE => 1,
CURLOPT_HEADER => 0,
CURLOPT_CONNECTTIMEOUT => 5,
CURLOPT_TIMEOUT => 30,
CURLOPT_STDERR => $f,
));
$response = curl_exec($ch);
fseek($f, 0);
echo fread($f, 32*1024); # output up to 32 KB cURL verbose log
fclose($f);
curl_close($ch);
echo $response;
Contoh penggunaan:
php curl-test.php OPTIONS https://google.com
Perhatikan bahwa hasilnya hampir identik dengan baris perintah berikut
curl -v -s -o - -X OPTIONS https://google.com
CURLOPT_WRITEHEADER dan CURLOPT_FILEkosong.
php?
Satu-satunya cara saya berhasil melihat tajuk keluar (curl with php) menggunakan opsi berikut:
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLINFO_HEADER_OUT, true);
Mendapatkan info debug Anda:
$data = curl_exec($ch);
var_dump($data);
var_dump(curl_getinfo($ch));
var_dump $dataakan mengembalikan header respons dan juga badan respons. Var_dump curl_getinfo($ch)akan memberi Anda header permintaan.
CURLOPT_HEADERadalah header respons - CURLINFO_HEADER_OUTadalah header permintaan. Inilah yang diminta OP :)
The --trace-asciipilihan untuk keriting akan menampilkan header permintaan, serta header respon dan respon tubuh.
Misalnya, perintahnya
curl --trace-ascii curl.trace http://www.google.com/
menghasilkan file curl.traceyang dimulai sebagai berikut:
== Info: About to connect() to www.google.com port 80 (#0)
== Info: Trying 209.85.229.104... == Info: connected
== Info: Connected to www.google.com (209.85.229.104) port 80 (#0)
=> Send header, 145 bytes (0x91)
0000: GET / HTTP/1.1
0010: User-Agent: curl/7.16.3 (powerpc-apple-darwin9.0) libcurl/7.16.3
0050: OpenSSL/0.9.7l zlib/1.2.3
006c: Host: www.google.com
0082: Accept: */*
008f:
Itu juga mendapat respons (respons 302, tepatnya tetapi tidak relevan) yang dicatat.
Jika Anda hanya ingin menyimpan header respons , gunakan --dump-headeropsi:
curl -D file url
curl --dump-header file url
Jika Anda memerlukan informasi lebih lanjut tentang opsi yang tersedia, gunakan curl --help | less(ini menghasilkan beberapa ratus garis output tetapi menyebutkan banyak opsi). Atau temukan halaman manual di mana ada lebih banyak penjelasan tentang apa arti opsi tersebut.
curl --trace-ascii {filename} atau gunakan tanda hubung tunggal alih-alih nama file untuk mengirimnya ke stdout:
curl --trace-ascii - {URL}
CURLOPT_DEBUGFUNCTION jika Anda menggunakan libcurl
Ini menunjukkan kepada Anda segala sesuatu yang dikirim dan diterima, dengan beberapa info tambahan dimasukkan.
Saya mencoba jawabannya di sini dan menemukan bahwa yang paling berguna dan termudah belum terdaftar sebagai jawaban, tetapi itu adalah:
curl -v https://example.com/path
Ini mencetak header PERMINTAAN serta header RESPONS plus berguna lainnya seperti sertifikat SSL dan apakah koneksi TCP yang ada digunakan kembali. yang -vflag dapat dikombinasikan dengan bendera lainnya, tentu saja, seperti untuk tindak pengalihan dan cepat untuk HTTP otentikasi:
curl -vL --user my_username https://example.com/path
Semoga ini membantu.
Perintah seperti di bawah ini akan menampilkan tiga bagian: header permintaan, header respons, dan data (dipisahkan oleh CRLF). Ini menghindari informasi teknis dan kebisingan sintaksis yang ditambahkan oleh curl.
curl -vs www.stackoverflow.com 2>&1 | sed '/^* /d; /bytes data]$/d; s/> //; s/< //'
Perintah akan menghasilkan output berikut:
GET / HTTP/1.1
Host: www.stackoverflow.com
User-Agent: curl/7.54.0
Accept: */*
HTTP/1.1 301 Moved Permanently
Content-Type: text/html; charset=UTF-8
Location: https://stackoverflow.com/
Content-Length: 149
Accept-Ranges: bytes
Date: Wed, 16 Jan 2019 20:28:56 GMT
Via: 1.1 varnish
Connection: keep-alive
X-Served-By: cache-bma1622-BMA
X-Cache: MISS
X-Cache-Hits: 0
X-Timer: S1547670537.588756,VS0,VE105
Vary: Fastly-SSL
X-DNS-Prefetch-Control: off
Set-Cookie: prov=e4b211f7-ae13-dad3-9720-167742a5dff8; domain=.stackoverflow.com; expires=Fri, 01-Jan-2055 00:00:00 GMT; path=/; HttpOnly
<head><title>Document Moved</title></head>
<body><h1>Object Moved</h1>This document may be found <a HREF="https://stackoverflow.com/">here</a></body>
Deskripsi:
-vs - tambahkan header (-v) tetapi hapus progress bar (-s)2>&1 - gabungkan stdout dan stderr menjadi stdout tunggalsed - edit respons yang dihasilkan oleh curl menggunakan perintah di bawah ini/^* /d - hapus baris yang dimulai dengan '*' (info teknis)/bytes data]$/d - hapus baris yang diakhiri dengan 'data byte]' (info teknis)s/> // - hapus awalan '>'s/< // - hapus awalan '<'Saya tahu ini sedikit terlambat, tetapi metode favorit saya untuk melakukan ini adalah netcat, karena Anda mendapatkan persis apa yang curldikirim; ini dapat berbeda dari opsi --traceatau --trace-asciiyang tidak akan menampilkan karakter non-ASCII dengan benar (mereka hanya ditampilkan sebagai titik atau perlu diterjemahkan).
Anda dapat melakukan ini dengan sangat mudah dengan membuka dua terminal windows, pada tipe pertama:
nc -l localhost 12345
Ini membuka proses mendengarkan pada port 12345 dari mesin lokal Anda.
Di jendela terminal kedua masukkan perintah curl Anda, misalnya:
curl --form 'foo=bar' localhost:12345
Di jendela terminal pertama Anda akan melihat secara tepat ikal apa yang dikirim dalam permintaan.
Sekarang tentu saja nctidak akan mengirim apa pun sebagai respons (kecuali Anda mengetiknya sendiri), jadi Anda perlu menghentikan perintah curl (control-c) dan ulangi proses untuk setiap tes.
Namun, ini adalah opsi yang berguna untuk hanya men-debug permintaan Anda, karena Anda tidak melibatkan pulang-pergi di mana pun, atau menghasilkan permintaan berulang yang palsu di suatu tempat sampai Anda melakukannya dengan benar; setelah Anda puas dengan perintahnya, cukup arahkan kembali ke URL yang valid dan Anda siap melakukannya.
Anda juga dapat melakukan hal yang sama untuk perpustakaan CURL, cukup edit permintaan Anda untuk menunjuk ke ncpendengar lokal sampai Anda puas.
buang header dalam satu file dan payload dari respons dalam file yang berbeda
curl -k -v -u user:pass "url" --trace-ascii headers.txt >> response.txt
curl -s -v -o / dev / null -H "Testheader: test" http://www.example.com
Anda juga dapat menggunakan -Iopsi jika Anda ingin mengirim permintaan HEAD dan bukan permintaan GET.
Berikut ini adalah klien http saya di php untuk memasukkan kueri posting dengan cookie:
function http_login_client($url, $params = "", $cookies_send = "" ){
// Vars
$cookies = array();
$headers = getallheaders();
// Perform a http post request to $ur1 using $params
$ch = curl_init($url);
$options = array( CURLOPT_POST => 1,
CURLINFO_HEADER_OUT => true,
CURLOPT_POSTFIELDS => $params,
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_HEADER => 1,
CURLOPT_COOKIE => $cookies_send,
CURLOPT_USERAGENT => $headers['User-Agent']
);
curl_setopt_array($ch, $options);
$response = curl_exec($ch);
/// DEBUG info echo $ response; var_dump (curl_getinfo ($ ch)); ///
// Parse response and read cookies
preg_match_all('/^Set-Cookie: (.*?)=(.*?);/m', $response, $matches);
// Build an array with cookies
foreach( $matches[1] as $index => $cookie )
$cookies[$cookie] = $matches[2][$index];
return $cookies;
} // end http_login_client
Anda bisa melihatnya dengan menggunakan -iv
$> curl -ivH "apikey:ad9ff3d36888957" --form "file=@/home/mar/workspace/images/8.jpg" --form "language=eng" --form "isOverlayRequired=true" https://api.ocr.space/Parse/Image
Buat contoh permintaan ke https://http-tools.appspot.com/reflect-http-request/some-unique-id dan periksa isi permintaan ini (tajuk permintaan, badan permintaan, parameter permintaan) dengan url pencari yang sesuai https : //http-tools.appspot.com/reflect-http-request-finder/some-unique-id . Anda dapat menggunakan string apa pun alih-alih some-unique-id, periksa https://http-tools.appspot.com untuk detail selengkapnya.