서명 확인 과정에서 서버는 채널 서버로부터 사용자 정보를 얻어야 하는 경우가 많습니다. 일반적으로 컬(curl)과 file_get_contents의 두 가지 방법이 있습니다.
일반적인 상황에서는 이렇게 사용해도 문제가 없습니다.
<span> 1</span><span>public</span><span>function</span> OauthPostExecuteNew(<span>$sign</span>,<span>$requestString</span>,<span>$request_serverUrl</span><span>){ </span><span> 2</span><span>$opt</span> = <span>array</span>("http"=><span>array</span><span>( </span><span> 3</span> "method"=>"GET", <span> 4</span> "header"=><span>array</span>("param:".<span>$requestString</span>,"oauthsignature:".<span>$sign</span>), <span> 5</span> "request_fulluri"=><span>true</span><span> 6</span><span> ) </span><span> 7</span><span> ); </span><span> 8</span><span> 9</span><span>$context</span> = <span>stream_context_create</span>(<span>$opt</span><span>); </span><span>10</span><span>$res</span>=<span>file_get_contents</span>(<span>$request_serverUrl</span>, <span>false</span>, <span>$context</span><span>); </span><span>11</span><span>12</span><span>return</span><span>$res</span><span>; </span><span>13</span> }
단, 저희 서버는 프록시를 통해 외부 네트워크에 연결하기 때문에 stream_context_create를 사용하여 채널 서버에 접속할 때 프록시 매개변수를 가져와야 합니다.
따라서 위 코드에서 "proxy"=>$proxy 필드를 $opt 배열에 추가하세요. 추가한 후에도 file_get_contents를 여전히 정상적으로 확인할 수 없는 것을 발견했습니다.
헷갈려서 공식 홈페이지에 가서 file_get_contents를 확인해보니 Proxy에 대한 설명이 없더군요. 그러다가 stream_context_create를 검색해 보니 공식 설명에 이런 문장이 포함되어 있었습니다
params
은 $arr['parameter'] = $value 형식의 연관 배열이어야 합니다. 컨텍스트 매개변수의 표준 자원 흐름 매개변수 목록을 참조하세요.
그런 다음 context_parameters를 입력하여 매개변수 구성을 확인합니다. HTTP를 사용하고 있으므로 HTTP 컨텍스트
를 확인하여 프록시 관련
proxy
문자열URI 사양을 확인하세요. 프록시 서버의 주소입니다. (예: tcp://proxy.example.com:5100).
request_fulluri
boolean으로 설정하면
TRUE
, 요청을 생성할 때 전체 URI가 사용됩니다. (예: http://www.example.com/path/to/file.html HTTP/1.0을 받으세요). 이는 비표준 요청 형식이지만 일부 프록시 서버에서는 이를 요구합니다.기본값은
FALSE
입니다.
프록시만 구성되어 있는데 request_fulluri가 구성되지 않은 것을 확인하여 request_fulluri=true를 추가했더니 인증이 통과되었습니다.
참고: 프록시 매개변수를 사용할 때 http를 tcp로 변경해야 합니다. 구체적인 이유는 모르겠습니다. 알게 되면 여기에 업데이트하겠습니다.
위 내용은 file_get_contents가 콘텐츠 측면을 포함하여 웹페이지의 콘텐츠를 얻을 수 없는 문제를 소개합니다. PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.