Computer >> 컴퓨터 >  >> 프로그래밍 >> PHP

PHP HTTP 컨텍스트 옵션 완벽 정리 – 주요 설정 항목과 실전 예제

개요

PHP에서 https://https:// 전송 프로토콜을 사용할 때는 스트림 컨텍스트 옵션을 통해 요청 방식을 세밀하게 제어할 수 있습니다. 아래 표는 해당 전송 계층에서 지원하는 주요 컨텍스트 옵션을 정리한 것입니다.

method원격 서버가 지원하는 HTTP 메서드입니다. 기본값은 GET입니다.
header요청 시 함께 전송할 추가 헤더입니다.
user_agentUser-Agent 헤더에 담아 보낼 값입니다. 기본적으로 php.ini의 user_agent 설정이 사용됩니다.
content헤더 뒤에 전송되는 추가 데이터로, 주로 POST 또는 PUT 요청과 함께 사용됩니다.
proxy프록시 서버의 주소를 지정하는 URI입니다.
request_fulluriTRUE로 설정하면 요청을 구성할 때 전체 URI를 사용합니다. 기본값은 FALSE입니다.
follow_locationLocation 헤더에 따른 리다이렉트를 따라갈지 여부입니다. 0으로 설정하면 비활성화되며, 기본값은 1입니다.
max_redirects따라갈 수 있는 최대 리다이렉트 횟수입니다.
protocol_version사용할 HTTP 프로토콜 버전입니다. 기본값은 1.0입니다.
timeout초 단위의 읽기 제한 시간으로, 실수(float) 형태로 지정합니다(예: 10.5).
ignore_errors실패 상태 코드(4xx, 5xx)가 반환되더라도 응답 본문을 가져옵니다. 기본값은 FALSE입니다.

다음 예제는 https:// URL에서 헤더 정보와 콘텐츠 메타데이터를 가져오는 방법을 보여줍니다.

예제

<?php
$url = "https://localhost/testscript.php";
$opts = array('http' =>
    array(
        'method' => 'GET',
        'max_redirects' => '0',
        'ignore_errors' => '1'
    )
);
$context = stream_context_create($opts);
$stream = fopen($url, 'r', false, $context);
var_dump(stream_get_meta_data($stream));
?>

위 코드에서는 stream_context_create() 함수로 컨텍스트를 생성한 뒤, fopen()의 네 번째 인자로 전달하여 HTTP 요청을 수행합니다. 이후 stream_get_meta_data()를 호출하면 응답 헤더와 스트림 관련 메타데이터를 확인할 수 있습니다.

실행 결과

위 예제를 실행하면 다음과 같이 헤더 정보와 메타데이터가 출력됩니다.

array(10) {
    ["timed_out"]=>
    bool(false)
    ["blocked"]=>
    bool(true)
    ["eof"]=>
    bool(false)
    ["wrapper_data"]=>
    array(7) {
        [0]=>
        string(15) "HTTP/1.1 200 OK"
        [1]=>
        string(35) "Date: Thu, 17 Sep 2020 07:04:47 GMT"
        [2]=>
        string(55) "Server: Apache/2.4.41 (Win64) OpenSSL/1.0.2s PHP/7.1.32"
        [3]=>
        string(24) "X-Powered-By: PHP/7.1.32"
        [4]=>
        string(17) "Content-Length: 0"
        [5]=>
        string(17) "Connection: close"
        [6]=>
        string(38) "Content-Type: text/html; charset=UTF-8"
    }
["wrapper_type"]=>
string(4) "http"
["stream_type"]=>
string(14) "tcp_socket/ssl"
["mode"]=>
string(1) "r"
["unread_bytes"]=>
int(0)
["seekable"]=>
bool(false)
["uri"]=>
string(31) "https://localhost/testscript.php"
}

출력 결과에서 wrapper_data 배열에는 상태 코드(HTTP/1.1 200 OK), 날짜, 서버 정보, Content-Type 등의 응답 헤더가 순서대로 포함되어 있으며, 나머지 키들은 스트림의 상태와 유형 등 부가 정보를 나타냅니다.