기본적으로 PHP는 프록시를 사용하지 않습니다. 프록시를 통해 우회하려면 get_meta_tags
Docs 함수 예제와 같이 http stream wrapper Docs (모든 래퍼가 http://
또는 https://
으로 시작하는 "파일 이름"을 처리하고 있음) 함수를 사용하여 모든 함수에 대한 프록시를 추가 할 수 있습니다.
많은 HTTP context options Docs가 있는데, 찾고있는 것은 proxy
입니다. 컨텍스트 매개 변수 (파일 이름 만 매개 변수)을 허용하지 않습니다 get_meta_tags
으로
, 당신은 (일반적으로) 파일 이름 매개 변수를 받아들이는 PHP 함수를 사용하는 소위 기본 컨텍스트을 변경해야합니다. stream_context_get_default
Docs으로 설정됩니다.
$opts = array(
'http' => array(
'proxy' => 'tcp://127.0.0.1:8000'
)
);
stream_context_get_default($opts);
불행하게도 get_meta_tags
는 (적어도 내 PHP 5.3.8 버전) 전혀 스트림 래퍼를 사용하는 일반적인 규칙에 예외처럼 보인다. 그러나 기본 컨텍스트를 사용하여 메타 태그를 얻으려는 데이터를 get_meta_tags
으로 옮길 수 있습니다.
data://
stream wrapperDocs으로이 작업을 수행 할 수 있습니다. 약간의 도우미 함수는 변환을 담당 :
/**
* obtain $filename content as data:// URI
*
* @link http://php.net/manual/en/wrappers.data.php
*
* @param string $filename
* @return string data:// URI
*/
function filename_data_uri($filename)
{
$buffer = file_get_contents($filename);
$mime = 'text/plain';
# obtain mime type and charset from http response (if available)
if (isset($http_response_header))
foreach($http_response_header as $header)
sscanf($header, 'Content-Type: %[^]]', $mime)
;
return "data://$mime;base64,".base64_encode($buffer);
};
이 기능은 기본 스트림 컨텍스트를 사용합니다 file_get_contents
과 URL에서 내용을 얻을 수 있습니다. 이것이 프록시가 구성된 대상입니다.
그런 다음 get_meta_tags
이것을 결합 할 수 있습니다 :
$url = 'http://www.espncricinfo.com/';
$url = filename_data_uri($url);
$meta_tags = get_meta_tags($url);
get_meta_tags
이제 프록시를 사용하는 동안 filename_data_uri
기능을 이미 가져온되었습니다 $url
의 내용을 운영하고 있습니다. 전체 예제 :
$url = 'http://www.espncricinfo.com/';
$proxy = 'tcp://host:port';
// configure default context to use proxy
$opts['http']['proxy'] = $proxy;
$resource = stream_context_get_default($opts);
// obtain url contents with default context
$data = filename_data_uri($url);
$meta_tags = get_meta_tags($data);
print_r($meta_tags);
/**
* obtain $filename content as data:// URI
*
* @link http://php.net/manual/en/wrappers.data.php
*
* @param string $filename
* @return string data:// URI
*/
function filename_data_uri($filename)
{
$buffer = file_get_contents($filename);
$mime = 'text/plain';
# obtain mime type and charset from http response (if available)
if (isset($http_response_header))
foreach($http_response_header as $header)
sscanf($header, 'Content-Type: %[^]]', $mime)
;
return "data://$mime;base64,".base64_encode($buffer);
};
나는 당신의 코드를 시도했지만 그 역시 도움이되지 않습니다! 다음과 같은 오류가 나타납니다 : 경고 : file_get_contents (http://www.espncricinfo.com/) [function.file-get-contents] : 스트림 열기 실패 : HTTP 요청하지 못했습니다! HTTP/1.1 502 프록시 오류 (URL (Uniform Resource Locator)는 인식 된 프로토콜을 사용하지 않습니다. curl (프록시 구성)을 사용하여 웹 사이트 콘텐츠를 가져올 수 있는데 get_meta_tags 함수로 전달했지만 작동하지 않았습니다. 나는 get_meta_tags가 문자열을 취하는 것을 읽었지만 작동하지 않았다. $ buffer는 항상 false입니다. – Adithya
http 헤더에 프로토콜을 지정하는 방법이 있습니까? – Adithya