file_get_contents 버전:
04 | * @param string $url 请求地址 |
05 | * @param array $post_data post键值对数据 |
08 | function send_post( $url ,
$post_data ) { |
10 | $postdata = http_build_query( $post_data ); |
14 |
'header' => 'Content-type:application/x-www-form-urlencoded' ,
|
15 |
'content' => $postdata ,
|
16 |
'timeout' => 15 * 60 // 超时时间(单位:s)
|
19 |
$context = stream_context_create( $options );
|
20 |
$result = file_get_contents ( $url , false,
$context );
|
다음과 같이 사용하세요.
2 |
'username' => 'stclair2201' ,
|
5 |
send_post( 'http://blog.snsgou.com' ,
$post_data );
|
실습:
위 코드를 사용하여 다른 서버에 http 요청을 보냈을 때, 서버에서 요청을 처리하는 데 너무 오랜 시간이 걸리면, 로컬 PHP는 소위 타임아웃 인터럽트라고 하는 요청을 중단합니다. 첫 번째 의심은 PHP 자체의 실행 시간이 제한을 초과한다는 것입니다. 그러나 생각해보면 "PHP 실행 시간 제한"이 설정되어 있기 때문에 그런 것은 아닙니다. 오래전에 본 글([권장]PHP 업로드 파일 크기 제한)에 따르면 곰곰히 생각해 봤는데, 생각해보니 http 요청 자체의 시간 제한이어야 하므로 어떻게 하면 늘릴 수 있을까 고민을 하게 되었습니다. http 요청의 시간 제한. . . . . . PHP 매뉴얼을 확인하면 실제로 매개변수가 있습니다.
"timeout"은 기본적으로 얼마나 큰지 모르겠습니다. 그 값을 더 큰 값으로 설정하면 문제가 해결됩니다~~
소켓 버전:
04 |
* $post_string = "app=socket&version=beta";
|
05 |
* request_by_socket('blog.snsgou.com', '/restServer.php', $post_string);
|
07 |
function request_by_socket( $remote_server , $remote_path , $post_string , $port = 80, $timeout = 30) {
|
08 |
$socket = fsockopen ( $remote_server ,
$port , $errno ,
$errstr , $timeout );
|
09 |
if (! $socket )
die ( "$errstr($errno)" );
|
10 |
fwrite( $socket ,
"POST $remote_path HTTP/1.0" );
|
11 |
fwrite( $socket ,
"User-Agent: Socket Example" );
|
12 |
fwrite( $socket ,
"HOST: $remote_server" );
|
13 |
fwrite( $socket ,
"Content-type: application/x-www-form-urlencoded" );
|
14 |
fwrite( $socket ,
"Content-length: " . ( strlen ( $post_string ) + 8) .
"" );
|
15 |
fwrite( $socket ,
"Accept:*/*" );
|
17 |
fwrite( $socket ,
"mypost=$post_string" );
|
20 |
while ( $str = trim( fgets ( $socket , 4096))) {
|
25 |
while (! feof ( $socket )) {
|
26 |
$data .= fgets ( $socket , 4096);
|
컬 버전:
04 |
* $post_string = "app=request&version=beta";
|
05 |
* request_by_curl('http://blog.snsgou.com/restServer.php', $post_string);
|
07 |
function request_by_curl( $remote_server ,
$post_string ) {
|
09 |
curl_setopt( $ch , CURLOPT_URL,
$remote_server );
|
10 |
curl_setopt( $ch , CURLOPT_POSTFIELDS,
'mypost=' . $post_string );
|
11 |
curl_setopt( $ch , CURLOPT_RETURNTRANSFER, true);
|
12 |
curl_setopt( $ch , CURLOPT_USERAGENT,
"snsgou.com's CURL Example beta" );
|
13 |
$data = curl_exec( $ch );
|
컬 버전(2)
04 |
* @param string $url 请求地址
|
05 |
* @param string $method 请求方式 GET/POST
|
06 |
* @param string $refererUrl 请求来源地址
|
07 |
* @param array $data 发送数据
|
08 |
* @param string $contentType
|
09 |
* @param string $timeout
|
10 |
* @param string $proxy
|
13 |
function send_request( $url ,
$data , $refererUrl = '' , $method = 'GET' ,
$contentType = 'application/json' ,
$timeout = 30, $proxy = false) {
|
15 |
if ( 'POST' === strtoupper ( $method )) {
|
17 |
curl_setopt( $ch , CURLOPT_POST, 1);
|
18 |
curl_setopt( $ch , CURLOPT_HEADER,0 );
|
19 |
curl_setopt( $ch , CURLOPT_FRESH_CONNECT, 1);
|
20 |
curl_setopt( $ch , CURLOPT_RETURNTRANSFER, 1);
|
21 |
curl_setopt( $ch , CURLOPT_FORBID_REUSE, 1);
|
22 |
curl_setopt( $ch , CURLOPT_TIMEOUT,
$timeout );
|
24 |
curl_setopt( $ch , CURLOPT_REFERER,
$refererUrl );
|
27 |
curl_setopt( $ch , CURLOPT_HTTPHEADER,
array ( 'Content-Type:' . $contentType ));
|
30 |
curl_setopt( $ch , CURLOPT_POSTFIELDS,
$data );
|
32 |
curl_setopt( $ch , CURLOPT_POSTFIELDS, http_build_query( $data ));
|
34 |
} else if ( 'GET' === strtoupper ( $method )) {
|
35 |
if ( is_string ( $data )) {
|
36 |
$real_url = $url . ( strpos ( $url ,
'?' ) === false ? '?' : '' ).
$data ;
|
38 |
$real_url = $url . ( strpos ( $url ,
'?' ) === false ? '?' : '' ). http_build_query( $data );
|
41 |
$ch = curl_init( $real_url );
|
42 |
curl_setopt( $ch , CURLOPT_HEADER, 0);
|
43 |
curl_setopt( $ch , CURLOPT_HTTPHEADER,
array ( 'Content-Type:' . $contentType ));
|
44 |
curl_setopt( $ch , CURLOPT_RETURNTRANSFER, 1);
|
45 |
curl_setopt( $ch , CURLOPT_TIMEOUT,
$timeout );
|
47 |
curl_setopt( $ch , CURLOPT_REFERER,
$refererUrl );
|
50 |
$args = func_get_args();
|
55 |
curl_setopt( $ch , CURLOPT_PROXY,
$proxy );
|
58 |
$info = curl_getinfo( $ch );
|
WCF 인터페이스 호출의 예: $json = RestRequest($r_url,'POST', json_encode( $ 데이터));
위 내용은 내용의 측면을 포함하여 PHP에서의 post 및 get 구현을 소개합니다. PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.