답변:
파일 내용 이상의 것을 필요로하지 않으면을 사용할 수 있습니다 file_get_contents
.
$xml = file_get_contents("http://www.example.com/file.xml");
더 복잡한 것은 cURL을 사용 합니다.
failed to open stream: HTTP request failed!
file_get_contents
사용자 정의 쿠키, 헤더 및 브라우저가 일반적으로 보내는 다른 것들로 요청을 할 수 없으므로 원하는 응답을 얻지 못할 수 있습니다. 이 경우 어쨌든 CURL을 사용하는 것이 좋습니다. (그러나 그것은 OP의 경우가 아닙니다.)
보다 고급 GET / POST 요청을 위해 CURL 라이브러리 ( http://us3.php.net/curl )를 설치할 수 있습니다 .
$ch = curl_init("REMOTE XML FILE URL GOES HERE"); // such as http://example.com/example.xml
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, 0);
$data = curl_exec($ch);
curl_close($ch);
file_get_contents()
. 간단한 4 글자 문자열은 약 10 초가 걸렸지 만 curl은 최대 1 초가 적당했습니다.
http_get
트릭을해야합니다. http_get
over 의 장점 file_get_contents
에는 HTTP 헤더를보고 요청 세부 사항에 액세스하며 연결 시간 종료를 제어하는 기능이 포함됩니다.
$response = http_get("http://www.example.com/file.xml");
프록시를 사용하는 경우 PHP 코드에서 약간의 트릭을 수행해야합니다.
(PROXY WITHOUT AUTENTICATION EXAMPLE)
<?php
$aContext = array(
'http' => array(
'proxy' => 'proxy:8080',
'request_fulluri' => true,
),
);
$cxContext = stream_context_create($aContext);
$sFile = file_get_contents("http://www.google.com", False, $cxContext);
echo $sFile;
?>
PHP 설정이 URL에서 fopen을 허용하는지 여부에 따라 문자열의 get 인수로 URL을 간단히 열 수도 있습니다 (예 : http://example.com?variable=value )
편집 : 난 당신이 변수 여부를 전달 찾고 있는지 확실하지 않다 질문을 다시 읽기 - 당신이하지 단순히 containg는 fopen 요청을 보낼 수 있다면 http://example.com/filename.xml을 - 주시기 바랍니다 변수 = 값 부분을 무시하려면
나는 이것을 위해 fsockopen open을 사용하는 것을 좋아합니다.
반면에 다른 서버의 REST API를 사용하는 것은 PHP에서 매우 인기가 있습니다. 일부 HTTP 요청을 다른 서버로 리디렉션하는 방법을 찾고 있다고 가정합니다 (예 : xml 파일 가져 오기). 다음은 PHP 패키지입니다.
https://github.com/romanpitak/PHP-REST-Client
따라서 xml 파일을 얻는 방법은 다음과 같습니다.
$client = new Client('http://example.com');
$request = $client->newRequest('/filename.xml');
$response = $request->getResponse();
echo $response->getParsedResponse();
Guzzle은 잘 알려진 라이브러리로 모든 종류의 HTTP 호출을 매우 쉽게 수행 할 수 있습니다. https://github.com/guzzle/guzzle을 참조 하십시오 . 로 설치 composer require guzzlehttp/guzzle
하고 실행하십시오 composer install
. 이제 아래 코드는 http get 호출에 충분합니다.
$client = new \GuzzleHttp\Client();
$response = $client->get('https://example.com/path/to/resource');
echo $response->getStatusCode();
echo $response->getBody();