[php] PHP cURL 대 file_get_contents

REST API에 액세스 할 때이 두 코드가 어떻게 다른가요?

$result = file_get_contents('http://api.bitly.com/v3/shorten?login=user&apiKey=key&longUrl=url');

$ch = curl_init('http://api.bitly.com/v3/shorten?login=user&apiKey=key&longUrl=url');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);

둘 다 동일한 결과를 산출합니다.

print_r(json_decode($result))



답변

file_get_contents()간단한 드라이버입니다. 헤더, HTTP 요청 방법, 시간 초과, cookiejar, 리디렉션 및 기타 중요한 사항이 중요하지 않은 간단한 GET 요청에 적합합니다.

fopen()로모그래퍼 스트림 컨텍스트 또는 컬 SETOPT 모든 비트와 당신이 생각할 수있는 옵션을 powerdrills이다.


답변

또한 최근 웹 사이트 해킹으로 인해 사이트를 더욱 안전하게 보호해야했습니다. 그렇게하면서 file_get_contents 가 작동하지 않고 curl이 여전히 작동 함을 발견 했습니다 .

100 %는 아니지만이 php.ini 설정이 file_get_contents 요청을 차단했을 수 있다고 생각합니다 .

; Disable allow_url_fopen for security reasons
allow_url_fopen = 0

어느 쪽이든, 우리 코드는 이제 curl 과 함께 작동합니다 .


답변

이것은 오래된 주제이지만 API에 대한 마지막 테스트에서 cURL이 더 빠르고 안정적입니다. 더 큰 요청에 대한 file_get_contents는 cURL이 1.4 ~ 1.9 초만 필요한 경우 5 초 이상 필요한 경우가 있습니다.

여기에 GET을 보내고 JSON 콘텐츠를 수신한다는 메모를 하나 추가해야합니다. cURL을 올바르게 설정하면 좋은 반응을 얻을 수 있습니다. 당신이 보내야 할 것과 받기 위해 필요한 것을 컬링하기 위해 “말”하기 만하면됩니다.

귀하의 시험에서이 설정을 수행하고 싶습니다.

$ch =  curl_init('http://api.bitly.com/v3/shorten?login=user&apiKey=key&longUrl=url');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
    curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
    curl_setopt($ch, CURLOPT_TIMEOUT, 3);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Accept: application/json'));
$result = curl_exec($ch);

이 요청은 최대 0.01 초 내에 데이터를 반환합니다.


답변