>  기사  >  백엔드 개발  >  PHP는 stream_context_create()를 사용하여 POST/GET 요청 메소드를 시뮬레이션합니다.

PHP는 stream_context_create()를 사용하여 POST/GET 요청 메소드를 시뮬레이션합니다.

高洛峰
高洛峰원래의
2017-01-06 15:10:221465검색

이 문서의 예에서는 PHP가 stream_context_create()를 사용하여 POST/GET 요청을 시뮬레이션하는 방법을 설명합니다. 참고할 수 있도록 모든 사람과 공유하세요. 세부 사항은 다음과 같습니다.

때로는 서버 측에서 POST/GET 및 기타 요청을 시뮬레이션해야 합니다. 즉, PHP 프로그램에서 시뮬레이션을 구현하는 방법입니다. 그것을 하기 위해? 즉, PHP 프로그램에서 배열이 주어지면 이 배열을 다른 주소로 어떻게 POST/GET합니까? 물론 CURL을 사용하면 쉽지만, CURL 라이브러리를 사용하지 않는다면 어떻게 될까요? 사실 PHP에는 이미 관련 함수가 구현되어 있는데, 이 함수가 다음에 이야기할 stream_context_create() 입니다.

코드를 직접 보여주세요. 이것이 가장 좋은 방법입니다.

$data = array(
    'foo'=>'bar', 
    'baz'=>'boom', 
    'site'=>'localhost', 
    'name'=>'nowa magic'); 
$data = http_build_query($data); 
//$postdata = http_build_query($data);
$options = array(
    'http' => array(
        'method' => 'POST',
        'header' => 'Content-type:application/x-www-form-urlencoded',
        'content' => $data
        //'timeout' => 60 * 60 // 超时时间(单位:s)
    )
);
$url = "http://localhost/test2.php";
$context = stream_context_create($options);
$result = file_get_contents($url, false, $context);
echo $result;

http://localhost/test2.php의 코드는 다음과 같습니다.

$data = $_POST;
echo &#39;<pre class="brush:php;toolbar:false">&#39;;
print_r( $data );
echo &#39;
';

실행 결과는 다음과 같습니다.

Array
(
  [foo] => bar
  [baz] => boom
  [site] => localhost
  [name] => nowa magic
)

설명할 핵심 사항:

1. 위 프로그램은 http_build_query() 함수를 사용합니다. 자세한 내용은 이전 기사 "PHP가 http_build_query()를 사용하여 URL 문자열을 구성하는 방법"을 참조하세요.

2. stream_context_create()는 POST를 통한 액세스, 프록시 사용, 헤더 전송 등과 같은 파일 열기를 위한 컨텍스트 옵션을 생성하는 데 사용됩니다. 스트림을 생성하고 다른 예를 들어보겠습니다.

$context = stream_context_create(array(
    &#39;http&#39; => array(
        &#39;method&#39; => &#39;POST&#39;,
        &#39;header&#39; => sprintf("Authorization: Basic %s\r\n", base64_encode($username.&#39;:&#39;.$password)).
        "Content-type: application/x-www-form-urlencoded\r\n",
        &#39;content&#39; => http_build_query(array(&#39;status&#39; => $message)),
        &#39;timeout&#39; => 5,
    ),
));
$ret = file_get_contents(&#39;http://twitter.com/statuses/update.xml&#39;, false, $context);

3. stream_context_create에 의해 생성된 컨텍스트 옵션은 스트림 또는 스트림 파일 시스템에 사용될 수 있습니다. 파일 핸들 없이 파일 이름에 직접 작동하는 file_get_contents, file_put_contents 및 readfile과 같은 함수에 더 유용합니다. stream_context_create에 헤더를 추가하는 것은 함수의 일부일 뿐이며 프록시, 시간 초과 등을 정의할 수도 있습니다. 이렇게 하면 웹에 접근하는 기능이 컬보다 약하지 않게 됩니다.

4. stream_context_create() 함수: 텍스트 데이터 스트림을 생성 및 반환하고 fopen()의 시간 초과 설정, 프록시 서버, 요청 방법 및 헤더 정보 설정에 사용할 수 있는 다양한 옵션을 적용합니다. file_get_contents() 및 기타 특수 프로세스.

5. stream_context_create는 시간 초과 옵션을 추가하여 file_get_contents 시간 초과 처리를 해결할 수도 있습니다.

$opts = array(
  &#39;http&#39;=>array(
  &#39;method&#39;=>"GET",
  &#39;timeout&#39;=>60,
 )
);
//创建数据流上下文
$context = stream_context_create($opts);
$html =file_get_contents(&#39;http://localhost&#39;, false, $context);
//fopen输出文件指针处的所有剩余数据:
//fpassthru($fp); //fclose()前使用

더 많은 PHP는 stream_context_create()를 사용하여 시뮬레이션합니다. POST /GET 요청 메소드 관련 글은 PHP 중국어 홈페이지를 주목해주세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.