php 는 socket 을 이용 하여 GET,POST 가 요청 한 인 스 턴 스 코드 를 보 냅 니 다.

phop 프로그래머 로 서 http 프로 토 콜 을 접 할 것 이 고 http 프로 토 콜 을 깊이 이해 해 야 프로 그래 밍 수준 이 더욱 향상 된다.최근 에 저 는 phop 의 http 프로 그래 밍 을 배우 고 있 습 니 다.많은 것들 이 문득 깨 닫 고 많은 것 을 얻 었 습 니 다.나 눠 드 렸 으 면 좋 겠 습 니 다.본 고 는 http 기반 의 개발 자가 읽 어야 합 니 다.
오늘 여러분 께 가 져 온 것 은 socket 을 이용 하여 GET,POST 요청 을 보 내 는 방법 입 니 다.나 는 연 18 선생님 이 봉 한 Http 류 를 빌려 설명 했다.
일상적인 프로 그래 밍 에서 많은 사람들 이 저 와 마찬가지 로 대부분의 시간 을 브 라 우 저 를 이용 하여 서버 에 GET,POST 요청 을 한다 고 믿 습 니 다.그러면 다른 방식 으로 GET,POST 요청 을 할 수 있 습 니까?답 은 반드시 긍정 적 이다.HTTP 프로 토 콜 을 알 아 본 사람 은 브 라 우 저가 요청 을 제출 하 는 실질 은 서버 에 요청 정 보 를 보 내 는 것 임 을 알 고 있 습 니 다.이 요청 정 보 는 요청 줄,요청 헤더,요청 체(필수 가 아 닌)로 구성 되 어 있 습 니 다.서버 는 요청 정보 에 따라 응답 정 보 를 되 돌려 줍 니 다.연결 이 끊어지다.
 HTTP 요청 형식 은 다음 과 같 습 니 다.

 <request-line>
 <headers>
 <blank line>
 [<request-body>]
HTTP 응답 형식 은 요청 한 형식 과 매우 비슷 합 니 다.

<status-line>
<headers>
<blank line>

[<response-body>]
HTTP 로 요청 을 보 내 는 원 리 를 이용 하여 socket 으로 HTTP 요청 을 보 내 는 것 을 다시 고려 할 수 있 습 니 다.
Socket 의 영문 원 의 는'구멍'이나'콘센트'이다.일반적으로'소켓'이 라 고도 부 르 는데 IP 주소 와 포트 를 설명 하 는 데 사용 되 며 통신 체인 의 문형 으로 서로 다른 가상 컴퓨터 나 서로 다른 컴퓨터 간 의 통신 을 실현 할 수 있다.인터넷 의 호스트 는 일반적으로 여러 개의 서비스 소프트웨어 를 실행 하 는 동시에 몇 가지 서 비 스 를 제공한다.모든 서 비 스 는 하나의 Socket 을 열 고 하나의 포트 에 연결 하 며 서로 다른 포트 는 서로 다른 서비스 에 대응 합 니 다.그 러 고 보 니 socket 을 이용 하여 원 격 파일 을 조작 하 는 것 은 로 컬 파일 을 읽 고 쓰 는 것 만큼 쉽 습 니 다.로 컬 파일 을 하드웨어 로 전송 하고 원 격 파일 은 네트워크 를 통 해 전송 하면 됩 니 다.
따라서 전송 요청 을 연결 만 들 기->socket 인터페이스 열기(fsockopen()->쓰기 요청(fwrite()->읽 기 응답(fread()->파일 닫 기(fclose()로 고려 할 수 있 습 니 다.할 말 이 많 지 않 으 니 코드 를 직접 입력 하 세 요.

<?php 

interface Proto {
  //   url
  function conn($url);

  //  get  
  function get();

  //   post  
  function post();

  //     
  function close();
}



class Http implements Proto {

  const CRLF = "\r
"; protected $errno = -1; protected $errstr = ''; protected $response = ''; protected $url = null; protected $version = 'HTTP/1.1'; protected $fh = null; protected $line = array(); protected $header = array(); protected $body = array(); 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; } // public function setHeader($headerline) { $this->header[] = $headerline; } // 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; } //  query if(!isset($this->url['query'])) { $this->url['query'] = ''; } $this->fh = fsockopen($this->url['host'],$this->url['port'],$this->errno,$this->errstr,3); } // get public function get() { $this->setLine('GET'); $this->request(); return $this->response; } // post public function post($body = array()) { $this->setLine('POST'); // content-type $this->setHeader('Content-type: application/x-www-form-urlencoded'); // , GET $this->setBody($body); // content-length $this->setHeader('Content-length: ' . strlen($this->body[0])); $this->request(); return $this->response; } // public function request() { // , ,   , $req = array_merge($this->line,$this->header,array(''),$this->body,array('')); //print_r($req); $req = implode(self::CRLF,$req); //echo $req; exit; fwrite($this->fh,$req); while(!feof($this->fh)) { $this->response .= fread($this->fh,1024); } $this->close(); //  } // public function close() { fclose($this->fh); } }
      이 를 이용 하여 간단 한 GET 요청 을 보 냅 니 다.

<?php//    Http 
$url="http://home.cnblogs.com/u/DeanChopper/";
$http=new Http($url);


$response=$http->get();

print_r($response);
반환 값 은 정보 로 응답 정 보 를 한층 더 처리 하여 원 하 는 내용 을 얻 을 수 있 습 니 다.
이상 은 phop 이 socket 을 이용 하여 GET,POST 가 요청 한 인 스 턴 스 코드 를 보 내 는 상세 한 내용 입 니 다.phop 이 GET,POST 요청 에 관 한 자 료 는 다른 관련 글 을 주목 하 십시오!

좋은 웹페이지 즐겨찾기