curl
서버에 요청을 보낼 때 만들어진 요청 헤더를보고 싶습니다 . 어떻게 확인할 수 있습니까?
답변
curl -v
가장 쉬운 것 같아요 . 파일에 쓸 필요없이 요청 헤더 ( ‘>’로 시작하는 줄)를 뱉어냅니다.
$ 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
이 의미인지 아니면 전체 cURL 라이브러리인지를 지정하지 않았습니다 .
cURL 라이브러리를 사용하는 다음 PHP 코드는 첫 번째 매개 변수를 HTTP 메소드로 사용하고 (예 : “GET”, “POST”, “OPTIONS”) 두 번째 매개 변수를 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;
사용법 예 :
php curl-test.php OPTIONS https://google.com
결과는 다음 명령 줄과 거의 동일합니다.
curl -v -s -o - -X OPTIONS https://google.com
답변
나가는 헤더 (php로 컬)를 볼 수있는 유일한 방법은 다음 옵션을 사용하는 것입니다.
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLINFO_HEADER_OUT, true);
디버그 정보 얻기 :
$data = curl_exec($ch);
var_dump($data);
var_dump(curl_getinfo($ch));
답변
--trace-ascii
에 옵션 컬은 요청 헤더뿐만 아니라, 응답 헤더 및 응답 본문을 표시합니다.
예를 들어
curl --trace-ascii curl.trace http://www.google.com/
curl.trace
다음과 같이 시작 하는 파일 을 생성 합니다.
== 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:
또한 기록 된 응답 (정확하지만 관련이없는 302 응답)을 받았습니다.
응답 헤더 만 저장 하려면 다음 --dump-header
옵션을 사용하십시오 .
curl -D file url
curl --dump-header file url
사용 가능한 옵션에 대한 자세한 정보가 필요한 경우 사용하십시오 curl --help | less
(수백 줄의 출력을 생성하지만 많은 옵션을 언급합니다). 또는 옵션의 의미에 대한 자세한 설명이 있는 매뉴얼 페이지를 찾으십시오 .
답변
curl –trace-ascii {filename} 또는 파일 이름 대신 단일 대시를 사용하여 stdout으로 전송하십시오.
curl --trace-ascii - {URL}
libcurl을 사용하는 경우 CURLOPT_DEBUGFUNCTION
이것은 컬 이주고 받는 모든 것을 보여주고 , 추가 정보가 던져집니다.
답변
여기에서 답변을 시도했지만 가장 유용하고 쉬운 답변이 아직 답변으로 표시되지 않았지만 다음과 같습니다.
curl -v https://example.com/path
아웃이 인쇄 요청 헤더뿐만 아니라 응답의 헤더 플러스 등의 SSL 인증서와 같은 기존 TCP 연결을 재사용 여부 유용한 다른. -v
플래그는 같은 HTTP 인증에 대한 후속의 리디렉션 및 프롬프트와 같은 물론 다른 플래그와 결합 될 수있다 :
curl -vL --user my_username https://example.com/path
도움이 되었기를 바랍니다.
답변
아래와 같은 명령은 요청 헤더, 응답 헤더 및 데이터 (CRLF로 구분)의 세 섹션으로 표시됩니다. 컬에 의해 추가 된 기술 정보 및 구문 노이즈를 피합니다.
curl -vs www.stackoverflow.com 2>&1 | sed '/^* /d; /bytes data]$/d; s/> //; s/< //'
이 명령은 다음과 같은 출력을 생성합니다.
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>
기술:
-vs
-헤더를 추가하지만 (-v) 진행률 표시 줄을 제거합니다 (-s)2>&1
-stdout과 stderr을 단일 stdout으로 결합sed
-아래 명령을 사용하여 curl로 생성 된 응답 편집/^* /d
– ‘*'(기술 정보)로 시작하는 줄을 제거하십시오./bytes data]$/d
– ‘bytes data]'(기술 정보)로 끝나는 줄 제거s/> //
– ‘>’접두사 제거s/< //
– ‘<‘접두사 제거