반응형
php curl 확장, 서버측 POST/GET 요청, 페이지 접근, 페이지 반환 데이터 획득이 가능합니다.
예를 들어 가져올 페이지: http://localhost/server.php
<?php
$content = isset($_POST['content'])? $_POST['content'] : '';
header('content-type:application/json');
echo json_encode(array('content'=>$content));
?>
curl을 사용하여 server.php 페이지 가져오기
<?php
$url = 'http://localhost/server.php';
$param = array('content'=>'fdipzone blog');
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($param));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$ret = curl_exec($ch);
$retinfo = curl_getinfo($ch);
curl_close($ch);
if($retinfo['http_code']==200){
$data = json_decode($ret, true);
print_r($data);
}else{
echo 'POST Fail';
}
?>
서비스에 php curl 확장 기능이 설치되어 있지 않으면 file_get_contents를 사용하여 요청, 페이지 반환 데이터 가져오기
<?php
$url = 'http://localhost/server.php';
$param = array('content'=>'fdipzone blog');
$opt = array(
'http' => array(
'method' => 'POST',
'header' => 'content-type:application/x-www-form-urlencoded',
'content' => http_build_query($param)
)
);
$context = stream_context_create($opt);
$ret = file_get_contents($url, false, $context);
if($ret){
$data = json_decode($ret, true);
print_r($data);
}else{
echo 'POST Fail';
}
?>
curl과 file_get_contents를 사용하여 반환된 결과는 동일합니다
Array
(
[content] => fdipzone blog
)
권한이 필요한 페이지, 예를 들어 htpasswd+.htaccess를 사용하여 디렉토리 접근 권한을 설정한 페이지에는 위의 방법으로 401 Unauthorized 오류가 반환됩니다.
이번 예에서는 htpasswd+.htaccess를 사용하여 접근 권한을 제어하는 대신 $_SERVER['P_AUTH_USER']와 $_SERVER['P_AUTH_USER']를 사용합니다.'PH_AUTH_PW'] 이 두 서버 파라미터
HTTP: // localhost/ server.php를 다음과 같이 수정합니다
<?php
if(!isset($_SERVER['PHP_AUTH_USER']))
{
header('WWW-Authenticate: Basic realm="localhost"');
header("HTTP/1.0 401 Unauthorized");
exit;
}else{
if (($_SERVER['PHP_AUTH_USER']!= "fdipzone" || $_SERVER['PHP_AUTH_PW']!="654321")) {
header('WWW-Authenticate: Basic realm="localhost"');
header("HTTP/1.0 401 Unauthorized");
exit;
}
}
$content = isset($_POST['content'])? $_POST['content'] : '';
header('content-type:application/json');
echo json_encode(array('content'=>$content));
?>
curl에는 CURLOPT_USERPWD라는 파라미터가 있습니다. 이 파라미터를 이용하여 계정 비밀번호를 요청 시 전송할 수 있습니다
curl_setopt($ch, CURLOPT_USERPWD, '계정: 비밀번호');
curl이 요청한 프로그램은 다음과 같이 수정되었습니다
<?php
$url = 'http://localhost/server.php';
$param = array('content'=>'fdipzone blog');
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($param));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERPWD, 'fdipzone:654321'); // 이 구절을 삽입하다
$ret = curl_exec($ch);
$retinfo = curl_getinfo($ch);
curl_close($ch);
if($retinfo['http_code']==200){
$data = json_decode($ret, true);
print_r($data);
}else{
echo 'POST Fail';
}
?>
file_get_contents 계정과 비밀번호를 보내려면 header를 수동으로 연결해야 합니다.
file_get_contents에서 요청한 프로그램은 다음과 같이 수정되었습니다
<?php
$url = 'http://localhost/server.php';
$param = array('content'=>'fdipzone blog');
$auth = sprintf('Authorization: Basic %s', base64_encode('fdipzone:654321')); //이 구절을 삽입하다
$opt = array(
'http' => array(
'method' => 'POST',
'header' => "content-type:application/x-www-form-urlencoded\r\n".$auth."\r\n", // $auth를 헤더에 넣다
'content' => http_build_query($param)
)
);
$context = stream_context_create($opt);
$ret = file_get_contents($url, false, $context);
if($ret){
$data = json_decode($ret, true);
print_r($data);
}else{
echo 'POST Fail';
}
?>
반응형
'개발 꿀팁 > PHP' 카테고리의 다른 글
php 0~1 난수 생성 방법 (0) | 2022.08.24 |
---|---|
JSON 문자열 key에 큰따옴표가 없습니다 (0) | 2022.08.24 |
php 문법 기술 (0) | 2022.08.24 |
mongodb 위치 찾기 (0) | 2022.08.24 |
php str_replace 지정한 횟수 바꾸기 (1) | 2022.08.23 |