SlideShare a Scribd company logo
1 of 9
서울시 마포구 상암동 누리꿈스퀘어 연구개발타워 1111호 _ 070.7450.6572 _ dev@jellycoaster.com
CrossDomain
Request
with PHP (Proxy)
Jellycoaster Inc.
Dev.team
목차
I. CrossDomain Request 란?
II. PHP Socket
III. Further Study
서울시 마포구 상암동 누리꿈스퀘어 연구개발타워 1111호 _ 070.7450.6572 _ dev@jellycoaster.com
I
Jellycoaster Inc. Dev.team
1- 위 그림과 같이 특정 도메인에서 다른 도메인으로 GET, POST 등의
방식으로 데이터를 보낸 후 처리 결과를 요청하는 것
- 대부분의 브라우저(클라이언트 측)에서는 보안상의 이유로 인해
원칙적으로 다른 도메인으로 Request를 할 수 없음!
I
Jellycoaster Inc. Dev.team
1
- 클라이언트단(Javascript 등)이 아닌 서버단(PHP)에서 처리 후
클라이언트 측으로 값을 넘겨주는 방식을 취하면 CDR 가능!
- 서버 측에서 CDR을 처리하는 페이지를 Proxy Page 라고 함
- PHP에서 Proxy Page를 만들기 위해 fsockopen 함수를 이용,
소켓 통신을 해야 함!
I
Jellycoaster Inc. Dev.team
1
function post_request($url, $data) {
// $data배열 값을 url 변수로 바꿈 (ex: a=b&foo=bar)
$data = http_build_query($data);
// URL 파싱
$url = parse_url($url);
if ($url['scheme'] != 'http') {
return "Error:Only HTTP request are supported!";
}
// extract host and path:
$host = $url['host'];
$path = $url['path'];
$res = '';
// 타임아웃 300초로 Socket 오픈
if ($fp = fsockopen($host, 80, $errno, $errstr, 300)) {
$reqBody = $data;
$reqHeader = "POST $path HTTP/1.1rn" . "Host: $hostrn";
$reqHeader .= "Content-type: application/x-www-form-urlencodedrn"
. "Content-length: " . strlen($reqBody) . "rn"
. "Connection: closernrn”;
I
Jellycoaster Inc. Dev.team
1
/* 요청 전송 */
fwrite($fp, $reqHeader);
fwrite($fp, $reqBody);
while(!feof($fp)) {
$res .= fgets($fp, 1024);
}
fclose($fp);
} else {
return "Error:Cannot Connect!";
}
// 응답을 헤더와 컨텐트로 분리
$result = explode("rnrn", $res, 2);
$header = isset($result[0]) ? $result[0] : '';
$content = isset($result[1]) ? $result[1] : '';
return $content;
}
I
Jellycoaster Inc. Dev.team
1
$res = $this->post_request($url, $data); // HTTP 소켓연결 후 POST 데이터 전송
$data_json = json_decode($res); // Json 데이터 수신
if($data_json->code == ‘00') // 코드값 00이면 TRUE, 아닐 경우 FALSE
return TRUE;
else
return FALSE;
I
Jellycoaster Inc. Dev.team
1
PHP Socket을 이용하여 할 수 있는 것들
- 웹페이지 Parsing
- 간이 채팅방 만들기
- 실시간 정보 이용 서비스
- ……..
PHP 소켓을 좀 더 쉽게, 다양하게 사용하려면?
- Snoopy.class 라는 PHP용 소켓 클래스를 사용해보자!
- 마지막 버전 소스 : http://snoopy.sourceforge.net/
서울시 마포구 상암동 누리꿈스퀘어 연구개발타워 1111호 _ 070.7450.6572 _ dev@jellycoaster.com
감사합니다!
Jellycoaster Inc.
Dev.team

More Related Content

Similar to Cdr with php

Node.js and react
Node.js and reactNode.js and react
Node.js and reactHyungKuIm
 
처음배우는 자바스크립트, 제이쿼리 #4
처음배우는 자바스크립트, 제이쿼리 #4처음배우는 자바스크립트, 제이쿼리 #4
처음배우는 자바스크립트, 제이쿼리 #4성일 한
 
진짜기초 Node.js
진짜기초 Node.js진짜기초 Node.js
진짜기초 Node.jsWoo Jin Kim
 
Ksug 세미나 (윤성준) (20121208)
Ksug 세미나 (윤성준) (20121208)Ksug 세미나 (윤성준) (20121208)
Ksug 세미나 (윤성준) (20121208)Sungjoon Yoon
 
자바 웹 개발 시작하기 (3주차 : 스프링 웹 개발)
자바 웹 개발 시작하기 (3주차 : 스프링 웹 개발)자바 웹 개발 시작하기 (3주차 : 스프링 웹 개발)
자바 웹 개발 시작하기 (3주차 : 스프링 웹 개발)DK Lee
 
NODE.JS 글로벌 기업 적용 사례 그리고, real-time 어플리케이션 개발하기
NODE.JS 글로벌 기업 적용 사례  그리고, real-time 어플리케이션 개발하기NODE.JS 글로벌 기업 적용 사례  그리고, real-time 어플리케이션 개발하기
NODE.JS 글로벌 기업 적용 사례 그리고, real-time 어플리케이션 개발하기John Kim
 
Internet speed 인터넷 속도를 측정해보자
Internet speed 인터넷 속도를 측정해보자Internet speed 인터넷 속도를 측정해보자
Internet speed 인터넷 속도를 측정해보자민석 김
 
vine webdev
vine webdevvine webdev
vine webdevdcfc1997
 
GKAC 2015 Apr. - Battery, 안드로이드를 위한 쉬운 웹 API 호출
GKAC 2015 Apr. - Battery, 안드로이드를 위한 쉬운 웹 API 호출GKAC 2015 Apr. - Battery, 안드로이드를 위한 쉬운 웹 API 호출
GKAC 2015 Apr. - Battery, 안드로이드를 위한 쉬운 웹 API 호출GDG Korea
 
Web App Security 2015.10
Web App Security 2015.10Web App Security 2015.10
Web App Security 2015.10Chanjin Park
 
Python server-101
Python server-101Python server-101
Python server-101Huey Park
 
PHP 함수와 제어구조
PHP 함수와 제어구조PHP 함수와 제어구조
PHP 함수와 제어구조Yoonwhan Lee
 
Apache solr소개 20120629
Apache solr소개 20120629Apache solr소개 20120629
Apache solr소개 20120629Dosang Yoon
 
막하는 스터디 첫 번째 만남 Node.js
막하는 스터디 첫 번째 만남 Node.js막하는 스터디 첫 번째 만남 Node.js
막하는 스터디 첫 번째 만남 Node.js연웅 조
 
Resource Handling in Spring MVC
Resource Handling in Spring MVCResource Handling in Spring MVC
Resource Handling in Spring MVCArawn Park
 
Startup JavaScript 8 - NPM, Express.JS
Startup JavaScript 8 - NPM, Express.JSStartup JavaScript 8 - NPM, Express.JS
Startup JavaScript 8 - NPM, Express.JSCirculus
 

Similar to Cdr with php (20)

Html5 performance
Html5 performanceHtml5 performance
Html5 performance
 
Node.js and react
Node.js and reactNode.js and react
Node.js and react
 
처음배우는 자바스크립트, 제이쿼리 #4
처음배우는 자바스크립트, 제이쿼리 #4처음배우는 자바스크립트, 제이쿼리 #4
처음배우는 자바스크립트, 제이쿼리 #4
 
진짜기초 Node.js
진짜기초 Node.js진짜기초 Node.js
진짜기초 Node.js
 
Ksug 세미나 (윤성준) (20121208)
Ksug 세미나 (윤성준) (20121208)Ksug 세미나 (윤성준) (20121208)
Ksug 세미나 (윤성준) (20121208)
 
자바 웹 개발 시작하기 (3주차 : 스프링 웹 개발)
자바 웹 개발 시작하기 (3주차 : 스프링 웹 개발)자바 웹 개발 시작하기 (3주차 : 스프링 웹 개발)
자바 웹 개발 시작하기 (3주차 : 스프링 웹 개발)
 
NODE.JS 글로벌 기업 적용 사례 그리고, real-time 어플리케이션 개발하기
NODE.JS 글로벌 기업 적용 사례  그리고, real-time 어플리케이션 개발하기NODE.JS 글로벌 기업 적용 사례  그리고, real-time 어플리케이션 개발하기
NODE.JS 글로벌 기업 적용 사례 그리고, real-time 어플리케이션 개발하기
 
Internet speed 인터넷 속도를 측정해보자
Internet speed 인터넷 속도를 측정해보자Internet speed 인터넷 속도를 측정해보자
Internet speed 인터넷 속도를 측정해보자
 
vine webdev
vine webdevvine webdev
vine webdev
 
Node.js at OKJSP
Node.js at OKJSPNode.js at OKJSP
Node.js at OKJSP
 
4-2. ajax
4-2. ajax4-2. ajax
4-2. ajax
 
GKAC 2015 Apr. - Battery, 안드로이드를 위한 쉬운 웹 API 호출
GKAC 2015 Apr. - Battery, 안드로이드를 위한 쉬운 웹 API 호출GKAC 2015 Apr. - Battery, 안드로이드를 위한 쉬운 웹 API 호출
GKAC 2015 Apr. - Battery, 안드로이드를 위한 쉬운 웹 API 호출
 
Web App Security 2015.10
Web App Security 2015.10Web App Security 2015.10
Web App Security 2015.10
 
Python server-101
Python server-101Python server-101
Python server-101
 
4-3. jquery
4-3. jquery4-3. jquery
4-3. jquery
 
PHP 함수와 제어구조
PHP 함수와 제어구조PHP 함수와 제어구조
PHP 함수와 제어구조
 
Apache solr소개 20120629
Apache solr소개 20120629Apache solr소개 20120629
Apache solr소개 20120629
 
막하는 스터디 첫 번째 만남 Node.js
막하는 스터디 첫 번째 만남 Node.js막하는 스터디 첫 번째 만남 Node.js
막하는 스터디 첫 번째 만남 Node.js
 
Resource Handling in Spring MVC
Resource Handling in Spring MVCResource Handling in Spring MVC
Resource Handling in Spring MVC
 
Startup JavaScript 8 - NPM, Express.JS
Startup JavaScript 8 - NPM, Express.JSStartup JavaScript 8 - NPM, Express.JS
Startup JavaScript 8 - NPM, Express.JS
 

More from 정인 주

안드로이드 Tstore 부분 유료화
안드로이드 Tstore 부분 유료화안드로이드 Tstore 부분 유료화
안드로이드 Tstore 부분 유료화정인 주
 
모든 기획자와 디자이너가 알아야 할 사람에 대한 100가지 진실 -제 2부-
모든 기획자와 디자이너가 알아야 할 사람에 대한 100가지 진실 -제 2부-모든 기획자와 디자이너가 알아야 할 사람에 대한 100가지 진실 -제 2부-
모든 기획자와 디자이너가 알아야 할 사람에 대한 100가지 진실 -제 2부-정인 주
 
Android volley library
Android volley libraryAndroid volley library
Android volley library정인 주
 
Blog 오래가는 ux 디자인
Blog 오래가는 ux 디자인Blog 오래가는 ux 디자인
Blog 오래가는 ux 디자인정인 주
 
목요일의 목어
목요일의 목어목요일의 목어
목요일의 목어정인 주
 
130522 book study-사례로보는ux디자인
130522 book study-사례로보는ux디자인130522 book study-사례로보는ux디자인
130522 book study-사례로보는ux디자인정인 주
 
130416 blog bookstudy_final
130416 blog bookstudy_final130416 blog bookstudy_final
130416 blog bookstudy_final정인 주
 
Android gcm ex_askdog
Android gcm ex_askdogAndroid gcm ex_askdog
Android gcm ex_askdog정인 주
 
Android gcm ex_askdog
Android gcm ex_askdogAndroid gcm ex_askdog
Android gcm ex_askdog정인 주
 
Android gcm ex_askdog
Android gcm ex_askdogAndroid gcm ex_askdog
Android gcm ex_askdog정인 주
 
Nfc개발문서
Nfc개발문서Nfc개발문서
Nfc개발문서정인 주
 
Book study ________ ___________
Book study  ________ ___________Book study  ________ ___________
Book study ________ ___________정인 주
 

More from 정인 주 (20)

안드로이드 Tstore 부분 유료화
안드로이드 Tstore 부분 유료화안드로이드 Tstore 부분 유료화
안드로이드 Tstore 부분 유료화
 
Gcm
GcmGcm
Gcm
 
모든 기획자와 디자이너가 알아야 할 사람에 대한 100가지 진실 -제 2부-
모든 기획자와 디자이너가 알아야 할 사람에 대한 100가지 진실 -제 2부-모든 기획자와 디자이너가 알아야 할 사람에 대한 100가지 진실 -제 2부-
모든 기획자와 디자이너가 알아야 할 사람에 대한 100가지 진실 -제 2부-
 
Android volley library
Android volley libraryAndroid volley library
Android volley library
 
Blog 오래가는 ux 디자인
Blog 오래가는 ux 디자인Blog 오래가는 ux 디자인
Blog 오래가는 ux 디자인
 
목요일의 목어
목요일의 목어목요일의 목어
목요일의 목어
 
130522 book study-사례로보는ux디자인
130522 book study-사례로보는ux디자인130522 book study-사례로보는ux디자인
130522 book study-사례로보는ux디자인
 
Regex
RegexRegex
Regex
 
130416 blog bookstudy_final
130416 blog bookstudy_final130416 blog bookstudy_final
130416 blog bookstudy_final
 
Android gcm ex_askdog
Android gcm ex_askdogAndroid gcm ex_askdog
Android gcm ex_askdog
 
Android gcm ex_askdog
Android gcm ex_askdogAndroid gcm ex_askdog
Android gcm ex_askdog
 
Android gcm ex_askdog
Android gcm ex_askdogAndroid gcm ex_askdog
Android gcm ex_askdog
 
Mvp 이전2
Mvp 이전2Mvp 이전2
Mvp 이전2
 
Nfc개발문서
Nfc개발문서Nfc개발문서
Nfc개발문서
 
Book study ________ ___________
Book study  ________ ___________Book study  ________ ___________
Book study ________ ___________
 
Nfc수정
Nfc수정Nfc수정
Nfc수정
 
Museum수정
Museum수정Museum수정
Museum수정
 
Nfc
NfcNfc
Nfc
 
Museum
MuseumMuseum
Museum
 
Starbucks
StarbucksStarbucks
Starbucks
 

Cdr with php

  • 1. 서울시 마포구 상암동 누리꿈스퀘어 연구개발타워 1111호 _ 070.7450.6572 _ dev@jellycoaster.com CrossDomain Request with PHP (Proxy) Jellycoaster Inc. Dev.team
  • 2. 목차 I. CrossDomain Request 란? II. PHP Socket III. Further Study 서울시 마포구 상암동 누리꿈스퀘어 연구개발타워 1111호 _ 070.7450.6572 _ dev@jellycoaster.com
  • 3. I Jellycoaster Inc. Dev.team 1- 위 그림과 같이 특정 도메인에서 다른 도메인으로 GET, POST 등의 방식으로 데이터를 보낸 후 처리 결과를 요청하는 것 - 대부분의 브라우저(클라이언트 측)에서는 보안상의 이유로 인해 원칙적으로 다른 도메인으로 Request를 할 수 없음!
  • 4. I Jellycoaster Inc. Dev.team 1 - 클라이언트단(Javascript 등)이 아닌 서버단(PHP)에서 처리 후 클라이언트 측으로 값을 넘겨주는 방식을 취하면 CDR 가능! - 서버 측에서 CDR을 처리하는 페이지를 Proxy Page 라고 함 - PHP에서 Proxy Page를 만들기 위해 fsockopen 함수를 이용, 소켓 통신을 해야 함!
  • 5. I Jellycoaster Inc. Dev.team 1 function post_request($url, $data) { // $data배열 값을 url 변수로 바꿈 (ex: a=b&foo=bar) $data = http_build_query($data); // URL 파싱 $url = parse_url($url); if ($url['scheme'] != 'http') { return "Error:Only HTTP request are supported!"; } // extract host and path: $host = $url['host']; $path = $url['path']; $res = ''; // 타임아웃 300초로 Socket 오픈 if ($fp = fsockopen($host, 80, $errno, $errstr, 300)) { $reqBody = $data; $reqHeader = "POST $path HTTP/1.1rn" . "Host: $hostrn"; $reqHeader .= "Content-type: application/x-www-form-urlencodedrn" . "Content-length: " . strlen($reqBody) . "rn" . "Connection: closernrn”;
  • 6. I Jellycoaster Inc. Dev.team 1 /* 요청 전송 */ fwrite($fp, $reqHeader); fwrite($fp, $reqBody); while(!feof($fp)) { $res .= fgets($fp, 1024); } fclose($fp); } else { return "Error:Cannot Connect!"; } // 응답을 헤더와 컨텐트로 분리 $result = explode("rnrn", $res, 2); $header = isset($result[0]) ? $result[0] : ''; $content = isset($result[1]) ? $result[1] : ''; return $content; }
  • 7. I Jellycoaster Inc. Dev.team 1 $res = $this->post_request($url, $data); // HTTP 소켓연결 후 POST 데이터 전송 $data_json = json_decode($res); // Json 데이터 수신 if($data_json->code == ‘00') // 코드값 00이면 TRUE, 아닐 경우 FALSE return TRUE; else return FALSE;
  • 8. I Jellycoaster Inc. Dev.team 1 PHP Socket을 이용하여 할 수 있는 것들 - 웹페이지 Parsing - 간이 채팅방 만들기 - 실시간 정보 이용 서비스 - …….. PHP 소켓을 좀 더 쉽게, 다양하게 사용하려면? - Snoopy.class 라는 PHP용 소켓 클래스를 사용해보자! - 마지막 버전 소스 : http://snoopy.sourceforge.net/
  • 9. 서울시 마포구 상암동 누리꿈스퀘어 연구개발타워 1111호 _ 070.7450.6572 _ dev@jellycoaster.com 감사합니다! Jellycoaster Inc. Dev.team