반응형
<?php
Interface Proto
{
// 연결 url
public function conn($url)
// get 보내기
function get( )
// 포스트 보내기
function post( )
// 연결 닫기
function close( )
}
class Http implements Proto
{
const CRLF = "\r\n"; // http 표준 줄 바꿈
protected $line = array( );
protected $header = array( );
protected $body = array( );
protected $url = array( );
protected $version = 'HTTP/1.1';
protected $fh = null;
protected $errno = -1;
protected $errstr = '';
protected $res = '';
public function __construct($url)
{
$this->conn($url);
$this->setHeader('Host: ' . $this->url['host']);
}
// 요청 줄 복사하기
protected function setLine($method)
{
$this->line[0] = $method. ''' . $this->url['path'''?''. $this->url['query'''. '' . $this->version;
}
// 헤더 메시지
protected function setHeader($headerLine)
{
$this->header[] = $headerLine;
// 'HOST: .$this->url['host']
}
// 주체 정보 쓰기
protected function setBody($body)
{
$this->body = (http_build_query($body));
}
// 연결 url
public function conn($url)
{
$this->url = parse_url($url);
// 판단 포트
if (!isset($this->url['port']) {
$this->url['port'] = 80;
}
$this->fh = fsockopen($this->url['host'], $this->url['port'], $errno, $errstr, 3)
}
// get 요청 생성
public function get( )
{
$this->setLine('GET');
$this->request( );
return $this->res;
}
// post 요청 생성
public function post($body = array())
{
// 구조 주체 정보
$this->setLine('POST');
$this->setBody($body);
// content-type 설정
$this->setHeader('Content-type: application/x-www-form-urlencoded');
// content-length 계산
$this->setHeader('Content-length: '.strlen($this->body));
$this->request( );
// return $this->res;
}
// 청구를 발기
public function request( )
{
// 요청 줄, 헤더 정보, 엔티티 정보를 하나의 배열에 배치하면 연결하기 쉽다
$req = array_merge($this->line, $this->header, array('', array($this->body), array('))
$req = implode(self::CRLF, $req);
// echo $req;
fwrite($this->fh, $req)
// echo $req;
// exit;
while (!feof($this->fh)) {
// 1024 fh 한번 읽으면 끝이 안나와
$this->res.= fread($this->fh, 1024)
}
$this->close( );
}
// 연결 닫기
public function close( )
{
fclose($this->fh);
}
}
$url = 'http://localhost:8081/post.php';
$http = new Http($url);
$http->post(array('name'=>'mike', 'age'=>'18');
반응형
'개발 꿀팁 > PHP' 카테고리의 다른 글
php가 같은 id를 병합 (0) | 2022.11.02 |
---|---|
php는 2차원 배열에 중복된 id가 있는지 여부를 판단한다 (0) | 2022.11.02 |
php 보안 및 취약성 (0) | 2022.11.02 |
mysql 미제출 트랜잭션을 조회하는 sql 문 (0) | 2022.11.01 |
MySQL 날짜별 최근 7일 데이터 집계 (0) | 2022.11.01 |