작성일: 2026년 3월 9일
최종 수정: 2026년 3월 9일 오후 06:37
약 2분 소요
API 호출 시 User-Agent 헤더로 인한 응답 차이 정리
User-agent 가 header에 있고 없고의 차이점
php
페이지를 불러오는 중...
주환
개발자
https://aaaaa.com/ai/xxx-token 같은 외부 API를 PHP에서 POST로 호출서버/CDN은 이 값을 보고 “일반 사용자 브라우저”인지 “우리 API를 쓰는 클라이언트”인지 구분할 수 있다.
즉, 같은 URL이라도 “누가 요청했는지”에 따라 라우팅/캐시가 달라지는 구조였다.
그래서 Accept: application/json, Content-Type: application/json만 있고 User-Agent가 없으면 여전히 HTML이 올 수 있었고, User-Agent를 추가한 뒤에만 JSON이 안정적으로 옴.
rawResponse에 API JSON이 아니라 <!doctype html>... 로 시작하는 HTML이 들어옴User-Agent가 없어 서버가 “일반 브라우저”로 처리stream_context이든)에 반드시 서버가 인정하는 User-Agent 값을 넣어야 함(예: User-Agent: MyApiClient/1.0)Authorization, User-AgentContent-Type: application/json, Accept: application/json(동작은 User-Agent만으로 될 수 있지만, 관례와 향후 변경 대비를 위해 두는 것이 좋음)User-Agent를 제거하면 다시 HTML이 오는 것이 확인되었으므로, 이 헤더는 제거하면 안 됨stream_context (file_get_contents) 경로header 옵션은 한 번에 하나의 문자열로 넘겨야 함. 로 이어붙여서 하나의 문자열로 만들어야 함잘못된 예 (문자열 연결 실수):
,만 있고 .가 없어서 세 번째·네 번째 줄이 실제 header 문자열에 포함되지 않을 수 있음올바른 예:
. 로 이어진 하나의 문자열이 되도록 해야 함
댓글