php 는 socket 을 이용 하여 GET,POST 가 요청 한 인 스 턴 스 코드 를 보 냅 니 다.
오늘 여러분 께 가 져 온 것 은 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 요청 에 관 한 자 료 는 다른 관련 글 을 주목 하 십시오!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Laravel - 변환된 유효성 검사 규칙으로 API 요청 제공동적 콘텐츠를 위해 API를 통해 Laravel CMS에 연결하는 모바일 앱(또는 웹사이트) 구축을 고려하십시오. 이제 앱은 CMS에서 번역된 콘텐츠를 받을 것으로 예상되는 다국어 앱이 될 수 있습니다. 일반적으로 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.