PHP 는 HTTPS 내용 을 캡 처 합 니 다.

최근 Hacker News API 를 연구 하 던 중 HTTPS 문제 가 발생 했 습 니 다.모든 Hacker News API 는 암호 화 된 HTTPS 프로 토 콜 을 통 해 접근 하기 때문에 일반적인 HTTP 프로 토 콜 과 달리 PHP 의 함수file_get_contents()를 사용 하여 API 에서 제공 하 는 데 이 터 를 가 져 오 는 중 오류 가 발생 했 습 니 다.사용 하 는 코드 는 다음 과 같 습 니 다.

<?php
$data = file_get_contents("https://hacker-news.firebaseio.com/v0/topstories.json?print=pretty");
......
위의 코드 를 실행 할 때 아래 의 오류 알림 을 만 났 습 니 다.

PHP Warning:  file_get_contents(): Unable to find the wrapper "https" - did you forget to enable it when you configured PHP?
다음은 캡 처:
php https error
왜 이런 오류 가 발생 했 습 니까?
인터넷 에서 검색 을 한 결과 이런 오 류 를 당 한 사람 이 아직도 적지 않다 는 것 을 알 게 되 었 습 니 다.문 제 는 매우 직접적 입 니 다.왜냐하면 PHP 의 설정 파일 에 인자 가 하나 도 열 리 지 않 았 기 때 문 입 니 다.제 컴퓨터 에 서 는/apache/bin/php.ini;extension=php_openssl.dll항목 입 니 다.앞의 번 호 를 제거 해 야 합 니 다.PHP 환경 설정 을 아래 스 크 립 트 로 확인 할 수 있 습 니 다.

$w = stream_get_wrappers();
echo 'openssl: ',  extension_loaded  ('openssl') ? 'yes':'no', "
";
echo 'http wrapper: ', in_array('http', $w) ? 'yes':'no', "
";
echo 'https wrapper: ', in_array('https', $w) ? 'yes':'no', "
";
echo 'wrappers: ', var_dump($w);
위의 스 크 립 트 세 션 을 실행 합 니 다.제 기계 에서 얻 은 결 과 는:

openssl: no
http wrapper: yes
https wrapper: no
wrappers: array(10) {
  [0]=>
  string(3) "php"
  [1]=>
  string(4) "file"
  [2]=>
  string(4) "glob"
  [3]=>
  string(4) "data"
  [4]=>
  string(4) "http"
  [5]=>
  string(3) "ftp"
  [6]=>
  string(3) "zip"
  [7]=>
  string(13) "compress.zlib"
  [8]=>
  string(14) "compress.bzip2"
  [9]=>
  string(4) "phar"
}
대안
잘못 을 발견 하고 잘못 을 고 치 는 것 은 간단 하 다.어 려 운 것 은 잘못 을 발견 한 후에 잘못 을 고 칠 수 없다 는 것 이다.나 는 원래 이 스 크 립 트 방법 을 원 격 호스트 에 적용 하려 고 했 지만 원 격 호스트 의 PHP 설정 을 수정 할 수 없 었 다.결 과 는 이 방안 을 사용 할 수 없 었 다.그러나 우 리 는 나무 에 목 을 매 죽 을 수 없 었 다.이 길 은 통 하지 않 았 다.다른 길이 있 는 지 살 펴 보 자.
또 다른 내 가 자주 사용 하 는 PHP 에서 내용 을 캡 처 하 는 함 수 는curlfile_get_contents()보다 강하 고 선택 가능 한 인 자 를 많이 제공 합 니 다.방문HTTPS내용 에 대한 문제 에 대해 우리 가 사용 해 야 할CURL설정 매개 변 수 는:

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
SSL 보안 인증 을 무시/건 너 뛰 었 다 는 것 을 의미 에서 알 수 있다.이것 은 좋 은 방법 이 아 닐 지 모 르 지만,일반적인 장면 에서 이 정도 면 충분 하 다.
다음은Curl패 키 징 을 이용 하여 HTTPS 내용 에 접근 할 수 있 는 함수 입 니 다.

function getHTTPS($url) {
  $ch = curl_init();
  curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
  curl_setopt($ch, CURLOPT_HEADER, false);
  curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
  curl_setopt($ch, CURLOPT_URL, $url);
  curl_setopt($ch, CURLOPT_REFERER, $url);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
  $result = curl_exec($ch);
  curl_close($ch);
  return $result;
}
이상 은 php 가 https 내용 을 가 져 오 는 모든 과정 입 니 다.간단 하고 실 용적 이 며 같은 프로젝트 에 필요 한 파트너 에 게 추천 합 니 다.

좋은 웹페이지 즐겨찾기