HTTP HEADER PARSE(헤더 파서) 간단한 프로그램
HTTP 헤더 파서 프로그램 입니다.
100% 완성된것은 아니지만 일반적으로 사용하는데는 문제 없습니다.
부족한 부분이 필요한 부분이라면 약간 더 추가해서 사용하면 됩니다.
$headers = "HTTP/1.1 200 OK
Cache-Control: no-cache
Pragma: no-cache
Content-Type: application/json; charset=utf-8
Expires: -1
Server: Microsoft-IIS/8.5
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Sun, 12 Sep 2021 12:17:58 GMT
Set-Cookie: MC1=GUID=861e8fa6f67&HASH=861e86632; Domain=.microsoft.com; Expires=Mon, 12 Sep 2022 12:23:48 GMT; Path=/;Secure; SameSite=None
Set-Cookie: MS0=88edfdc; Domain=.microsoft.com; Expires=Sun, 12 Sep 2021 12:53:48 GMT; Path=/;Secure; SameSite=None
Content-Length: 135579
";
# \r\n 이 맞기는 하지만 일부 \n만 있는 경우도 있기? 때문에
$aHttpHeader= explode("\n", $headers);
$aHttpHead = array();
foreach( $aHttpHeader as $k=>$v )
{
$v = str_replace("\r", '', $v);
$t = explode( ':', $v, 2 );
if( isset( $t[1] ) )
$aHttpHead[ trim($t[0]) ] = trim( $t[1] );
else
{
$aHttpHead[] = $v;
if( preg_match( "#HTTP/[0-9\.]+\s+([0-9]+)#",$v, $out ) )
$aHttpHead['reponse_code'] = intval($out[1]);
}
# 파일첨부
# Content-Disposition: form-data; name=\"userfile\"; filename=\"$file_name\"\r\n
if ( stristr($v, 'content-disposition') ) {
}
# 캐릭터셋이 들어간 경우
# Content-type: text/html; charset=euc-kr
if ( stristr($v, 'Content-type') ) {
}
#
# Set-Cookie: MS0=88edfdc; Domain=.microsoft.com; Expires=Sun, 12 Sep 2021 12:53:48 GMT; Path=/;Secure; SameSite=None
if ( stristr($v, 'set-cookie') ) {
}
}
# 바디가 청크로 이뤄진것인가?
# Transfer-Encoding: chunked
print_r($aHttpHead);
* 위에서 채워 줘야 하는것은 3가지 입니다.
1) 파일첨부 - 형식에 맞게 ; 으로 구분한 다음 = 으로 한번더 구분하여 배열로 만들면 됩니다.
2) 컨텐츠 타입. UTF-8로 넘어오면서 우선순위 문제로 헤더에 들어가는 경우가 많습니다. 헤더에 있으면 더 우선 합니다.
3) 쿠키설정 - 이건 Set-Cookie 로 된것이 1개만 있는것이 아니라 여러개 있습니다. 아래 결과를 보시면 1개만 나오지만파싱 할때는 배열로 만들어 줘야 합니다.
뭑뭐가 잘못 되었는지 쉽게 알 수 있죠.
헤더 샘플엔 쿠키값 설정이 2개 인데. 결과는 1개 밖에 없네요. 이것도 ; 으로 먼저 구분한 다음. = 으로 구분하여 값을 만들어 주면 됩니다.
* CURL에서 HTTP 헤더와 바디 구분하기
HTTP 헤더와 바디 구분하기 - CURL 사용 > PHP
* CURL HTTP POST 전송
* CURL COOKIE SAVE - 쿠키 저장(가지고있다가) 요청하는 방법
CURL 쿠키 저장했다가 서버로 보내기(전송하기) - 로그인처리 > PHP
관련링크