[curl] 서버로 요청을 보낼 때 curl에 의해 작성된 요청 헤더를 어떻게 볼 수 있습니까?

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/< // – ‘<‘접두사 제거