PHP에서 GET 요청을 보내는 방법은 무엇입니까?


280

간단한 요구 사항에 PHP를 사용할 계획입니다. URL에서 XML 컨텐츠를 다운로드해야하며,이 URL로 HTTP GET 요청을 보내야합니다.

PHP에서 어떻게합니까?

답변:


378

파일 내용 이상의 것을 필요로하지 않으면을 사용할 수 있습니다 file_get_contents.

$xml = file_get_contents("http://www.example.com/file.xml");

더 복잡한 것은 cURL을 사용 합니다.


3
쿼리 문자열 매개 변수를 사용해야 할 필요가없는 한 이것이 맞습니다.
랩터

2
@musicfreak : 일부 서버에서는 보안 설정을 위해 쿼리 문자열이 무시되는 경우가 있습니다. 또한 서버 간 쿼리로 failed to open stream: HTTP request failed!
인해이

26
@ ShivanRaptor : 무슨 말을하는지 모르겠습니다 ... 쿼리 문자열은 문자열의 일부일뿐입니다. 서버가 서버를 무시할 이유가 없습니다. 이제는 file_get_contents사용자 정의 쿠키, 헤더 및 브라우저가 일반적으로 보내는 다른 것들로 요청을 할 수 없으므로 원하는 응답을 얻지 못할 수 있습니다. 이 경우 어쨌든 CURL을 사용하는 것이 좋습니다. (그러나 그것은 OP의 경우가 아닙니다.)
Sasha Chedygov

1
컬은 file_get_contents보다 빠릅니다. 트래픽이 많은 환경에서 file_get_contents보다 컬을 선호
Deb

2
@Sasha-많은 프로덕션 환경에서이 문제에 직면했지만 현재 다음 링크를 볼 수 있습니다 : haltiko.blogspot.com/2013/02/… 또는 mdb9.wordpress.com/2011/03/06/…
Deb

132

보다 고급 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);

10
"간단한 요구 사항"에 CURL을 사용할 필요는 없지만 +1입니다. PHP의 HTTP 요청으로 더 발전된 작업을 수행하기위한 최상의 솔루션이기 때문입니다.
xyz 2018

이미 언급했듯이 curl은보다 빠릅니다 file_get_contents(). 간단한 4 글자 문자열은 약 10 초가 걸렸지 만 curl은 최대 1 초가 적당했습니다.
피터 고든

@pgmann 결과가 확실합니까? 이것은 인용 된 것과 다른 통계와 일치하지 않습니다. 실제로 CURL은 더 빠르지 만 그렇게 빠를 수는 없습니다. 응답 시간의 이러한 감소는 일부 리소스 등의 서버 측 캐싱에서 비롯된 것일 수 있습니다. 테스트를 반복해야합니까?
Rauni Lillemets

1
@Rauni 나는 다시 테스트 할 수 없다고 생각하지만 속도 증가 등을 위해 항상 cURL을 사용합니다. 요청 시간은 대략적이며 페이지를로드 할 때의 느낌입니다. 나는 여러 번 시도했다.
피터 고든

63

http_get트릭을해야합니다. http_getover 의 장점 file_get_contents에는 HTTP 헤더를보고 요청 세부 사항에 액세스하며 연결 ​​시간 종료를 제어하는 ​​기능이 포함됩니다.

$response = http_get("http://www.example.com/file.xml");

83
http 확장은 PHP와 함께 제공되지 않으며 종종 공유 호스트에서 사용할 수 없습니다.
Imran

27
pecl_http> = 0.1.0이 필요하며 기본적으로 설치되지 않습니다.
랩터

5
" 이 서버에서 현재 찾고있는 매뉴얼 페이지 ( us2.php.net/manual/en/function.http-get.php )를 사용할 수 없습니다."
Pang

20

프록시를 사용하는 경우 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;
?>

9

PHP 설정이 URL에서 fopen을 허용하는지 여부에 따라 문자열의 get 인수로 URL을 간단히 열 수도 있습니다 (예 : http://example.com?variable=value )

편집 : 난 당신이 변수 여부를 전달 찾고 있는지 확실하지 않다 질문을 다시 읽기 - 당신이하지 단순히 containg는 fopen 요청을 보낼 수 있다면 http://example.com/filename.xml을 - 주시기 바랍니다 변수 = 값 부분을 무시하려면



5

반면에 다른 서버의 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();

5

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();
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.