프록시 뒤에 file_get_contents?
직장에서는 기본적으로 포트 80에 액세스하기 위해 프록시를 사용해야합니다. 예를 들어 각 사용자에 대한 고유 한 사용자 지정 로그인이 있습니다.
내 임시 해결 방법은 curl을 사용하여 기본적으로 프록시를 통해 자신으로 로그인하고 필요한 외부 데이터에 액세스하는 것입니다.
내부적으로 호출하려고 할 때마다 file_get_contents()
항상 프록시를 통과 하도록 설정할 수있는 일종의 고급 PHP 설정 이 있습니까? 저는 Windows ATM을 사용하고 있으므로 이것이 유일한 방법이라면 재 컴파일하는 것이 고통 스러울 것입니다.
내 해결 방법이 일시적인 이유는 한 사용자의 자격 증명을 사용하는 대신 일반적이고 여러 사용자에게 작동하는 솔루션이 필요하기 때문입니다 (이 작업을 수행하기 위해 별도의 사용자 계정을 요청하는 것을 고려했지만 암호가 자주 변경되고이 기술을 전체적으로 배포해야합니다. 12 개 이상의 사이트). 기본적으로 curl 해결 방법을 사용하기 위해 자격 증명을 하드 코딩하고 싶지 않습니다.
file_get_contents()
인증이 필요하지 않은 프록시를 통해 / 통해 사용하려면 다음과 같이해야합니다.
(이것을 테스트 할 수 없습니다 : 프록시에 인증이 필요합니다)
$aContext = array(
'http' => array(
'proxy' => 'tcp://192.168.0.2:3128',
'request_fulluri' => true,
),
);
$cxContext = stream_context_create($aContext);
$sFile = file_get_contents("http://www.google.com", False, $cxContext);
echo $sFile;
물론, 내 프록시의 IP와 포트를 귀하에게 적합한 것으로 대체하십시오 ;-)
그런 종류의 오류가 발생하는 경우 :
Warning: file_get_contents(http://www.google.com) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.0 407 Proxy Authentication Required
프록시에 인증이 필요함을 의미합니다.
프록시에 인증이 필요한 경우 다음과 같이 몇 줄을 추가해야합니다.
$auth = base64_encode('LOGIN:PASSWORD');
$aContext = array(
'http' => array(
'proxy' => 'tcp://192.168.0.2:3128',
'request_fulluri' => true,
'header' => "Proxy-Authorization: Basic $auth",
),
);
$cxContext = stream_context_create($aContext);
$sFile = file_get_contents("http://www.google.com", False, $cxContext);
echo $sFile;
IP와 포트에 대해서도 마찬가지입니다. 이번에는 LOGIN과 PASSWORD ;-) 유효한 모든 http 옵션을 확인하십시오 .
이제 로그인 및 비밀번호가 포함 된 Proxy-Authorization 헤더를 프록시 에 전달 합니다.
그리고 ... 페이지가 표시되어야합니다 ;-)
stream_context_set_default
기능을 사용하십시오 . 추가 매개 변수를 전달하지 않고 file_get_contents 또는 유사한 함수를 직접 사용할 수 있으므로 사용하기가 훨씬 쉽습니다.
이 블로그 게시물 은 사용 방법을 설명합니다. 다음은 해당 페이지의 코드입니다.
<?php
// Edit the four values below
$PROXY_HOST = "proxy.example.com"; // Proxy server address
$PROXY_PORT = "1234"; // Proxy server port
$PROXY_USER = "LOGIN"; // Username
$PROXY_PASS = "PASSWORD"; // Password
// Username and Password are required only if your proxy server needs basic authentication
$auth = base64_encode("$PROXY_USER:$PROXY_PASS");
stream_context_set_default(
array(
'http' => array(
'proxy' => "tcp://$PROXY_HOST:$PROXY_PORT",
'request_fulluri' => true,
'header' => "Proxy-Authorization: Basic $auth"
// Remove the 'header' option if proxy authentication is not required
)
)
);
$url = "http://www.pirob.com/";
print_r( get_headers($url) );
echo file_get_contents($url);
?>
프록시 로그인이 작동하는 방식에 따라 stream_context_set_default 가 도움이 될 수 있습니다.
$context = stream_context_set_default(
array(
'http'=>array(
'header'=>'Authorization: Basic ' . base64_encode('username'.':'.'userpass')
)
)
);
$result = file_get_contents('http://..../...');
There's a similar post here: http://techpad.co.uk/content.php?sid=137 which explains how to do it.
function file_get_contents_proxy($url,$proxy){
// Create context stream
$context_array = array('http'=>array('proxy'=>$proxy,'request_fulluri'=>true));
$context = stream_context_create($context_array);
// Use context stream with file_get_contents
$data = file_get_contents($url,false,$context);
// Return data via proxy
return $data;
}
참고URL : https://stackoverflow.com/questions/1336262/file-get-contents-behind-a-proxy
'programing' 카테고리의 다른 글
실험적 :: 파일 시스템 링커 오류 (0) | 2020.11.04 |
---|---|
MySQL과 다른 PostgreSQL GROUP BY? (0) | 2020.11.04 |
Django-Model.create () 메서드 재정의? (0) | 2020.11.03 |
관리자는 모델 인스턴스를 통해 액세스 할 수 없습니다. (0) | 2020.11.03 |
SQL Server 오류 1222를 해결하는 방법, 즉 SQL Server 테이블 잠금 해제 (0) | 2020.11.03 |