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 -Ivs http://example.com > /dev/null
: -I
A에 대한 HEAD
요청 -v
, 보낸 헤더를 보여 -s
, 숨기기 진행률 표시 줄에 > /dev/null
중복을 피하기 만 -v 출력을 표시합니다.
-D -
는 깔끔하지만 -v
이미 표시된 헤더를 단순히 복제했기 때문에 유용하지 않았습니다 . 자동화 된 기계 소비를 위해 접두사를 붙이지 않으면이 경우 더 좋을 수도 있지만 문제가 무엇인지 자세히 알고 싶었습니다.
curl -v https://www.example.com
; 둘째, HTTP 프록시 등을 CONNECT
통해 사이트를 방문하는 경우 요청을 인쇄합니다 . 이 답변에 이러한 두 가지 기능의 예가 언급되면 더 많은 사용자에게 도움이 될 것이라고 생각합니다. curl --proxy my-proxy:8080 http://www.example.com
-I
현대에서는 사람들이 헤더를 보는 것에 대해 질문 할 때 아마도 API에 대해 이야기하고있을 것입니다. 그리고 " -I
Apache 웹 서버에서 헤더를 보는 데 사용합니다"라는 생각을 사용 HEAD
한다면 아마도 사용하려고 할 때 메소드 에 대해 개발하는 데 많은 시간을 낭비하게 될 것입니다 GET
. 사람들에게 사용을 말하지 마십시오 -I
. 그들은 원하는 경우 HEAD
, 사용 -X HEAD
(TWSS)
이 질문은 명명 된 명령 행 명령 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
CURLOPT_WRITEHEADER
과 CURLOPT_FILE
비어있는 파일을 명심하십시오 .
php?
나가는 헤더 (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));
var_dump $data
응답 본문뿐만 아니라 응답 헤더도 반환합니다. var_dump curl_getinfo($ch)
는 요청 헤더를 제공합니다.
CURLOPT_HEADER
응답 헤더- CURLINFO_HEADER_OUT
요청 헤더입니다. 이것은 OP가 요구하는 것입니다 :)
--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/< //
- '<'접두사 제거나는 이것이 조금 늦었다는 것을 알고 있지만 netcat
, 당신이 curl
보낸 것을 정확히 얻을 때 내가 선호하는 방법은입니다 . ASCII가 아닌 문자를 올바르게 표시하지 않는 옵션 --trace
또는 --trace-ascii
옵션 과 다를 수 있습니다 (점으로 표시되거나 디코딩되어야 함).
첫 번째 유형에서 두 개의 터미널 창을 열어서이 작업을 매우 쉽게 수행 할 수 있습니다.
nc -l localhost 12345
로컬 컴퓨터의 포트 12345에서 청취 프로세스가 열립니다.
두 번째 터미널 창에서 curl 명령을 입력하십시오.
curl --form 'foo=bar' localhost:12345
첫 번째 터미널 창 에서 요청에서 어떤 컬이 전송 되었는지 정확하게 볼 수 있습니다.
물론 nc
입력하지 않는 한 응답으로 아무것도 보내지 않으므로 curl 명령 (control-c)을 중단하고 각 테스트에 대해 프로세스를 반복해야합니다.
그러나이 방법은 요청을 디버깅하기위한 유용한 옵션입니다. 어디에서나 왕복 여행을하지 않거나 원하는 위치에 올 때까지 가짜 반복 요청을 생성하지 않기 때문입니다. 명령에 만족하면 명령을 유효한 URL로 리디렉션하면됩니다.
cURL 라이브러리에 대해서도 동일한 작업을 수행 할 수 있으며, nc
만족할 때까지 로컬 리스너 를 가리 키도록 요청을 편집하기 만하면 됩니다.
curl -s -v -o / dev / null -H "Testheader : 테스트"http://www.example.com
-I
GET 요청이 아닌 HEAD 요청을 보내려는 경우 옵션 을 사용할 수도 있습니다 .
다음은 쿠키가 포함 된 게시물 쿼리를 작성하는 PHP의 http 클라이언트입니다.
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);
/// 디버그 정보 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
당신은 그것을 사용하여 그것을 볼 수 있습니다 -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
https://http-tools.appspot.com/reflect-http-request/some-unique-id에 샘플 요청을 작성 하고 해당 파인더 URL https로 요청에 포함 된 내용 (요청 헤더, 요청 본문, 요청 매개 변수)을 확인 하십시오 https : //http-tools.appspot.com/reflect-http-request-finder/some-unique-id . 대신 문자열을 사용할 수 있습니다 . 자세한 내용은 https://http-tools.appspot.com 을 some-unique-id
확인 하십시오.