SlideShare a Scribd company logo
1 of 31
Download to read offline
안성현(@SH84AHN)
웹 관련 프로그래밍 1탄
클라이언트 만들기
1
오늘 다룰 것들.
2
urllib2
Request
errorbuild_opener
install_opener
urlencode
urlopen urljoin/urlsplit
urlparse
ftplib
hashlib
json
xml
base64
urllib2 패키지
3
http, ftp 서버와의 상호작용이 필요한 클라이언트 작성시 사용.
웹 페이지, 자동화 도구, 프록시, 웹크롤러 등에서 데이터를 긁어오는데 주로 사용.
 urllib vs. urllib2
- URL 만 vs. URL, Request
urlib2.urlopen(url [, data [, timeout]])
- 요청 보내기
- url : 문자열 url, Request 클래스의 인스턴스
- data : POST 방식 전송시 폼데이터, URL 인코딩된 데이터
- timeout : 초
- 파일객체와 유사한 객체 반환
urllib2.urlopen
4
메소드 설명
read(size) Size 만큼의 문자열 반환, 지정하지 않으면 전체
readline() 한줄의 텍스트 반환
readlines() 모든줄을 리스트로 반환
close() 연결 닫기
info() URL 과 관련된 메타정보가 있는 객체 반환
getcode() HTTP 응답코드 정수 반환
geturl() 반환 데이터의 실제 URL 반환, redirection 고려
urlopen() 함수 반환객체의 함수들
urllib2.urlopen
5
<!
DOCTYPE html>
1070
Cache-Control: private
Content-Length: 65092
Content-Type: text/html; charset=utf-8
Server: Microsoft-IIS/6.0
X-AspNet-Version: 4.0.30319
X-Internal-Url: /
Set-Cookie: TriggerOverlay=membership-
02|7|http://images.wolfgangsvault.com/cvfeatures/cream_clapto
n_400x533.jpg; expires=Thu, 19-Jun-2014 06:04:35 GMT;
path=/
Date: Thu, 19 Jun 2014 05:04:35 GMT
Connection: close
200
http://www.concertvault.com/
urllib2.Request
6
기본적인 것은 url 문자열로 호출
상세한 지정을 Request 클래스 이용
> {
"foo": [
"bar"
],
"q": [
"query string"
]
}
data 를 추가하면 post 방식으로 자동 변경
urllib2.Request(url[, data][, headers][, origin_req_host][, unverifiable])
 data 추가
urllib2.Request
7
{
"Accept-Encoding": "identity",
"Api-Link": "http://dev.danal.co.kr",
"Api-Version": "1.0",
"Connection": "close",
"Content-Length": "",
"Content-Type": "",
"Host": "localhost:5000",
"User-Agent": "Python-urllib/2.7"
}
 header 추가
urllib2.Request
8
Request.add_data(data)
- 요청에 데이터 추가
- POST 방식으로 변경, data 는 URL 인코딩된 데이터
Request.get_method()
- http method 반환
Request.has_data()
- 데이터가 있는지 확인
Request.get_data()
- 요청에 데이터가 있으면 반환
Request.add_header(key, val)
- 헤더정보 추가 , key 가 헤더이름, val 가 헤더값
Request.add_unredirected_header(key, header)
- redirect 가 있을경우에 추가되지 않을 헤더정보 추가
Request.has_header(header)
- 헤더정보가 있는지
urllib2.Request
9
Request.get_full_url()
- 전체 url 반환
Request.get_type()
- url의 타입반환
Request.get_host()
- 요청을 보낼 host 반환
Request.get_selector()
- URL 에서 selector 부분 반환
Request.get_header(header_name, default=None)
- 지정한 헤더에 대한 값 반환
Request.header_items()
- 헤더정보 전체 반환
Request.is_unverifiable()
- 요청을 검증할수 없는 경우 True 반환
urllib2.build_opener
10
urlopen() 함수는 인증, 쿠키 등의 HTTP 고급 기능지원하지 않음.
커스텀 오프너를 만들어야 함.
필요한 handler 를 추가하는 방식으로 생성
 여러가지 handler..
urllib2.build_opener([handler, ...])
클래스 설명
urllib2.HTTPBasicAuthHandler 기본 http 인증 처리
urllib2.HTTPDigestAuthHandler HTTP digest 인증 처리
urllib2.HTTPCookieProcessor HTTP 쿠키처리
urllib2.HTTPHandler url을 HTTP 로 열기
urllib2.HTTPSHandler url을 HTTPS 로 열기
urllib2.HTTPRedirectHandler HTTP 페이지 전환을 처리
urllib2.build_opener
11
기본적으로 들어있는 handler 들.
['__doc__', '__init__', '__module__', '_call_chain', '_open',
'add_handler', 'addheaders', 'close', 'error', 'handle_error',
'handle_open', 'handlers', 'open', 'process_request',
'process_response']
urllib2.build_opener
12
암호인증이 필요하다? 기본핸들러에는 없는데?
HTTPBasicAuthHandler() 를 만들어서 사용.
urllib.install_opener
13
install_opener(opener)
- handler.open() 함수가 아닌 urlopen() 으로 호출하고 싶을때. 설치.
urlparse
14
URL 문자열 조작할때 사용
http
10.10.1.126:8090
/pages/viewpage.action
pageId=3179193
None
None
10.10.1.126
8090
netloc : 네트워크 위치 지정자
fragment : 앞쪽#을 뺀 지정자
urljoin, urlsplit
15
Base URL + 지정한 URL = 절대 URL
> http://10.10.1.126:8090/page
> http://10.10.1.126:8090/1
params 제외, urlparse 와 동일
> SplitResult(scheme='http',
netloc='10.10.1.126:8090', path='/pages/viewpage.action',
query='pageId=3179193', fragment='')
urlencode
16
urlencode(query)
- query : 사전이거나 쌍들의 순서
quote  unquote
quote_plus  unquote_plus
ash84_jin%3D%20%40gmail.com
ash84_jin%3D+%40gmail.com
ash84_jin= @gmail.com
ash84_jin= @gmail.com
error
17
exception urllib2.URLError
- IOError 의 서브 클래스
- reason 속성이 문제에 대한 정보를 가지고 있다.
exception urllib2.HTTPError
- URLError의 서브 클래스
- HTTP 프로토콜과 관련된 문제
- 인증요구와 같은 이벤트를 알리는데 사용.
- HTTP Staus code, reason 속성
exception urllib.ContentTooShortError
- 다운로드된 데이터의 양이 예상한것(Content-length) 적은 경우 발생
ftplib
18
FTP 프로토콜로 클라이언트쪽 구현시 사용
class ftplib.FTP([host[, user[, passwd[, acct[, timeout]]]]])
- FTP 연결을 나타내는 객체 생성
- host 를 연결하면 자동으로 connect() 함수 호출.
- user, password, acct 를 지정하면 login() 함수 호출.
FTP.connect(host[, port[, timeout]])
FTP.login([user[, passwd[, acct]]])
FTP.close()
ftplib
19
ftp.cwd(path)
- 디렉토리 변경, cd..
ftp.mkd()
- 서버에 새디렉토리 생성
ftp.rename(old, new)
- 서버의 파일 이름 변경
ftp.pwd()
- 현재 디렉토리 반환
ftp.rmd(dirname)
- 해당 디렉토리 삭제
ftp.dir(dirname)
- ‘LIST’ 명령 호출, 지정하지 않으면 현재 디렉토리 기준 출력
- dirname 지정하면 지정한곳으로 출력
ftp.size(filename)
- 지정한 파일의 사이즈 출력
ftplib
20
ftp.storbinary(command, file, [, blocksize])
- 이진 전송모드로 데이터 전송
- command 는 문자열, “STOR “+filename
- blocksize 는 전송에 사용할 블록크기
ftp.storlines(command, file)
- 텍스트 전송 모드로 데이터 전송
- command 는 문자열, “STOR “+filename
ftplib
21
ftp.retrlines(command [, callback])
- 서버에서 명령을 실행한 결과를 텍스트로 반환
- callback 은 콜백함수 지정, 지정하지 않으면 stdout
ftp.retrbianry(command, callback [, blocksizes [, rest]])
- 서버에서 실행한 결과를 이진 전송 모드로 반환
- command : “RETR ”+filename
- callback : 데이터 블록 받을때 마다 호출되는 함수
- rest : 파일 오프셋
base64
22
base64, base16, base32 인코딩을ㄹ 사용하여 이진데이터를 텍스트로 인코딩 혹은 디코딩
메일첨부나 http 프로토콜에서 이진 데이터를 추가하는데 사용
altchars : base64 출력에서 +,  을 대체하기 위한 2개의 문자열 지정
YXNoODQ6MTIzNA==
ash84:1234
YXNoODQ6MTIzNA==
ash84:1234
61736838343A31323334
ash84:1234
MFZWQOBUHIYTEMZU
ash84:1234
xml
23
SAX, DOM, ElementTree 인터페이스 제공
DOM : xml.dom.minidom
SAX : xml.sax
ElementTree : xml.etree.ElementTree
xml.dom.minidom
24
XML 을 파싱해서 DOM 규약에 따라 메모리에 트리구조로 저장하는 기능 제공
parse, parseString() 으로 파싱
attributes
firstchild
lastchild
nodename
nodetype
getElementByTagName()
hasAttributes()
getAttribute()
documentElement()
appendChild()
removeChild()
replaceChild()
xml.sax
25
SAX2 API를 사용하여 API 문서를 파싱
start parsing
attr : domain t1
attr : price 12000
attr : domain gs
attr : domain ld
attr : domain sas
attr : domain 342d
end parsing
xml.sax.ContentHandler 의 서브클래스를 사용
일종의 handler
특정 경우에 특정 함수를 할당
- startDocuemnt : 문서 시작시 호출
- endDocuemnt : 문서 시작시 호출
- startElement : 엘리먼트 시작시
- endElement: 엘리먼트 끝날경우
xml.etree.ElementTree
26
계층적인 데이터를 저장하고 조작하는데 사용하는 ElementTree 객체 정의
찾기 : find(), finall(), findtext(), getroot(), get(), items(), keys()..
조작 : append(), clear(), insert(), remove(), set()(..
json
27
dump, load 함수는 파일객체 대상
dumps, loads 함수는 문자열 대상
{"habits": ["cooking", "camping", "sleeping"], "name": "ash84"}
<type 'dict'>
{u'habits': [u'cooking', u'camping', u'sleeping'], u'name':
u'ash84'}
json
28
object_hook : 디코딩된 결과 객체를 인수로 전달, 중간에 데이터 조작을 할 함수 지정.
cls : 디코딩할 JSONDecoder 하위 클래스 지정
parse_float, parse_int : 부동소수점, 정수값 디코딩을 위한 함수 호출 지정.
{u'name': u'ash8n4', 'habit': u'cooking'}
hashlib
29
다양한 보안 해시와 MD5, SHA 등의 Message-digest 알고리즘 구현 모듈
함수 설명
md5(data) MD5 해시(128비트)
sha1(data) SHA1 해시(160비트)
sha224(data) SHA224 해시(226비트)
shar256(data) SHA256 해시(256비트)
sha384(data) SHA384 해시(384비트)
sha512(data) SHA512 해시(512비트)
함수 설명
d.update(data) 새로운 데이터로 업데이트,
그러나 이어지는 것. 덮어써지는게 아니다.
d.digest() 무가공 바이트 문자열로 요약 값 반환
d.hexdigest() 16진수 숫자들로 인코딩된 요약텍스트
위의 함수의 리턴 객체에 대한 함수들.
hashlib
30
9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6
c15b0f00a08
37268335dd6931045bdcdf92623ff819a64244b53d0e746d4387
97349d4da578
9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6
c15b0f00a08
098f6bcd4621d373cade4e832627b4f6
05a671c66aefea124cc08b76ea6d30bb
098f6bcd4621d373cade4e832627b4f6
SHA256MD5
정리
31
urllib, urllib2 를 이용, 상세한 요청은 Request
인증, 쿠키 등의 고급 기능 => build_opener 이용, 커스텀 오프너
urlencode 는 호출시 반드시 사용.
error 처리를 잘 활용하자. 401, 404, 500
XML 파싱 => 용도와 크기 고려
JSON, dump, load 만 기억
hashlib 에서 update 는 갱신이 아니라 concat

More Related Content

What's hot

제 9회 엑셈 수요 세미나 자료 연구컨텐츠팀
제 9회 엑셈 수요 세미나 자료 연구컨텐츠팀제 9회 엑셈 수요 세미나 자료 연구컨텐츠팀
제 9회 엑셈 수요 세미나 자료 연구컨텐츠팀EXEM
 
[Pgday.Seoul 2018] PostgreSQL 11 새 기능 소개
[Pgday.Seoul 2018]  PostgreSQL 11 새 기능 소개[Pgday.Seoul 2018]  PostgreSQL 11 새 기능 소개
[Pgday.Seoul 2018] PostgreSQL 11 새 기능 소개PgDay.Seoul
 
Airflow를 이용한 데이터 Workflow 관리
Airflow를 이용한  데이터 Workflow 관리Airflow를 이용한  데이터 Workflow 관리
Airflow를 이용한 데이터 Workflow 관리YoungHeon (Roy) Kim
 
Learning Node Book, Chapter 5
Learning Node Book, Chapter 5Learning Node Book, Chapter 5
Learning Node Book, Chapter 5Ji Hun Kim
 
SW1차 프로젝트 Hive 최종발표
SW1차 프로젝트 Hive 최종발표SW1차 프로젝트 Hive 최종발표
SW1차 프로젝트 Hive 최종발표Sinhyub Kim
 
Amazon aurora 2
Amazon aurora 2Amazon aurora 2
Amazon aurora 2EXEM
 
Apache solr소개 20120629
Apache solr소개 20120629Apache solr소개 20120629
Apache solr소개 20120629Dosang Yoon
 
Mongo DB 완벽가이드 - 4장 쿼리하기
Mongo DB 완벽가이드 - 4장 쿼리하기Mongo DB 완벽가이드 - 4장 쿼리하기
Mongo DB 완벽가이드 - 4장 쿼리하기JangHyuk You
 
Node.js를 사용한 Big Data 사례연구
Node.js를 사용한 Big Data 사례연구Node.js를 사용한 Big Data 사례연구
Node.js를 사용한 Big Data 사례연구ByungJoon Lee
 
IT 일반기술 강의자료_ed10
IT 일반기술 강의자료_ed10IT 일반기술 강의자료_ed10
IT 일반기술 강의자료_ed10hungrok
 
20141029 하둡2.5와 hive설치 및 예제
20141029 하둡2.5와 hive설치 및 예제20141029 하둡2.5와 hive설치 및 예제
20141029 하둡2.5와 hive설치 및 예제Tae Young Lee
 
[110730/아꿈사발표자료] mongo db 완벽 가이드 : 7장 '고급기능'
[110730/아꿈사발표자료] mongo db 완벽 가이드 : 7장 '고급기능'[110730/아꿈사발표자료] mongo db 완벽 가이드 : 7장 '고급기능'
[110730/아꿈사발표자료] mongo db 완벽 가이드 : 7장 '고급기능'sung ki choi
 
Ji 개발 리뷰 (신림프로그래머)
Ji 개발 리뷰 (신림프로그래머)Ji 개발 리뷰 (신림프로그래머)
Ji 개발 리뷰 (신림프로그래머)beom kyun choi
 
Elastic Search (엘라스틱서치) 입문
Elastic Search (엘라스틱서치) 입문Elastic Search (엘라스틱서치) 입문
Elastic Search (엘라스틱서치) 입문SeungHyun Eom
 
제2회 한글형태소분석기 기술 세니마 발표(solr 활용 입문) by 김지훈
제2회 한글형태소분석기 기술 세니마 발표(solr 활용 입문) by 김지훈제2회 한글형태소분석기 기술 세니마 발표(solr 활용 입문) by 김지훈
제2회 한글형태소분석기 기술 세니마 발표(solr 활용 입문) by 김지훈jihoon kim
 
엘라스틱서치, 로그스태시, 키바나
엘라스틱서치, 로그스태시, 키바나엘라스틱서치, 로그스태시, 키바나
엘라스틱서치, 로그스태시, 키바나종민 김
 
Ryu with OpenFlow 1.3, REST API
Ryu with OpenFlow 1.3, REST APIRyu with OpenFlow 1.3, REST API
Ryu with OpenFlow 1.3, REST APIjieun kim
 
일래스틱 서치 ch7. 일래스틱 서치 클러스터 세부사항
일래스틱 서치 ch7. 일래스틱 서치 클러스터 세부사항일래스틱 서치 ch7. 일래스틱 서치 클러스터 세부사항
일래스틱 서치 ch7. 일래스틱 서치 클러스터 세부사항Minchul Jung
 

What's hot (20)

제 9회 엑셈 수요 세미나 자료 연구컨텐츠팀
제 9회 엑셈 수요 세미나 자료 연구컨텐츠팀제 9회 엑셈 수요 세미나 자료 연구컨텐츠팀
제 9회 엑셈 수요 세미나 자료 연구컨텐츠팀
 
[Pgday.Seoul 2018] PostgreSQL 11 새 기능 소개
[Pgday.Seoul 2018]  PostgreSQL 11 새 기능 소개[Pgday.Seoul 2018]  PostgreSQL 11 새 기능 소개
[Pgday.Seoul 2018] PostgreSQL 11 새 기능 소개
 
Airflow를 이용한 데이터 Workflow 관리
Airflow를 이용한  데이터 Workflow 관리Airflow를 이용한  데이터 Workflow 관리
Airflow를 이용한 데이터 Workflow 관리
 
테스트
테스트테스트
테스트
 
Learning Node Book, Chapter 5
Learning Node Book, Chapter 5Learning Node Book, Chapter 5
Learning Node Book, Chapter 5
 
SW1차 프로젝트 Hive 최종발표
SW1차 프로젝트 Hive 최종발표SW1차 프로젝트 Hive 최종발표
SW1차 프로젝트 Hive 최종발표
 
Amazon aurora 2
Amazon aurora 2Amazon aurora 2
Amazon aurora 2
 
Apache solr소개 20120629
Apache solr소개 20120629Apache solr소개 20120629
Apache solr소개 20120629
 
Mongo DB 완벽가이드 - 4장 쿼리하기
Mongo DB 완벽가이드 - 4장 쿼리하기Mongo DB 완벽가이드 - 4장 쿼리하기
Mongo DB 완벽가이드 - 4장 쿼리하기
 
Node.js를 사용한 Big Data 사례연구
Node.js를 사용한 Big Data 사례연구Node.js를 사용한 Big Data 사례연구
Node.js를 사용한 Big Data 사례연구
 
IT 일반기술 강의자료_ed10
IT 일반기술 강의자료_ed10IT 일반기술 강의자료_ed10
IT 일반기술 강의자료_ed10
 
20141029 하둡2.5와 hive설치 및 예제
20141029 하둡2.5와 hive설치 및 예제20141029 하둡2.5와 hive설치 및 예제
20141029 하둡2.5와 hive설치 및 예제
 
Mem cached
Mem cachedMem cached
Mem cached
 
[110730/아꿈사발표자료] mongo db 완벽 가이드 : 7장 '고급기능'
[110730/아꿈사발표자료] mongo db 완벽 가이드 : 7장 '고급기능'[110730/아꿈사발표자료] mongo db 완벽 가이드 : 7장 '고급기능'
[110730/아꿈사발표자료] mongo db 완벽 가이드 : 7장 '고급기능'
 
Ji 개발 리뷰 (신림프로그래머)
Ji 개발 리뷰 (신림프로그래머)Ji 개발 리뷰 (신림프로그래머)
Ji 개발 리뷰 (신림프로그래머)
 
Elastic Search (엘라스틱서치) 입문
Elastic Search (엘라스틱서치) 입문Elastic Search (엘라스틱서치) 입문
Elastic Search (엘라스틱서치) 입문
 
제2회 한글형태소분석기 기술 세니마 발표(solr 활용 입문) by 김지훈
제2회 한글형태소분석기 기술 세니마 발표(solr 활용 입문) by 김지훈제2회 한글형태소분석기 기술 세니마 발표(solr 활용 입문) by 김지훈
제2회 한글형태소분석기 기술 세니마 발표(solr 활용 입문) by 김지훈
 
엘라스틱서치, 로그스태시, 키바나
엘라스틱서치, 로그스태시, 키바나엘라스틱서치, 로그스태시, 키바나
엘라스틱서치, 로그스태시, 키바나
 
Ryu with OpenFlow 1.3, REST API
Ryu with OpenFlow 1.3, REST APIRyu with OpenFlow 1.3, REST API
Ryu with OpenFlow 1.3, REST API
 
일래스틱 서치 ch7. 일래스틱 서치 클러스터 세부사항
일래스틱 서치 ch7. 일래스틱 서치 클러스터 세부사항일래스틱 서치 ch7. 일래스틱 서치 클러스터 세부사항
일래스틱 서치 ch7. 일래스틱 서치 클러스터 세부사항
 

Similar to 파이썬 웹프로그래밍 1탄

파이썬 플라스크 이해하기
파이썬 플라스크 이해하기 파이썬 플라스크 이해하기
파이썬 플라스크 이해하기 Yong Joon Moon
 
막하는 스터디 첫 번째 만남 Node.js
막하는 스터디 첫 번째 만남 Node.js막하는 스터디 첫 번째 만남 Node.js
막하는 스터디 첫 번째 만남 Node.js연웅 조
 
Angular2 router&http
Angular2 router&httpAngular2 router&http
Angular2 router&httpDong Jun Kwon
 
파이썬 유용한 라이브러리
파이썬 유용한 라이브러리파이썬 유용한 라이브러리
파이썬 유용한 라이브러리SeongHyun Ahn
 
파이썬 크롤링 모듈
파이썬 크롤링 모듈파이썬 크롤링 모듈
파이썬 크롤링 모듈Yong Joon Moon
 
[Hello world 오픈세미나]open api client개발
[Hello world 오픈세미나]open api client개발[Hello world 오픈세미나]open api client개발
[Hello world 오픈세미나]open api client개발NAVER D2
 
Web App Security 2015.10
Web App Security 2015.10Web App Security 2015.10
Web App Security 2015.10Chanjin Park
 
하이퍼레저 페이지 단위 블록 조회
하이퍼레저 페이지 단위 블록 조회하이퍼레저 페이지 단위 블록 조회
하이퍼레저 페이지 단위 블록 조회wonyong hwang
 
log-monitoring-architecture.pdf
log-monitoring-architecture.pdflog-monitoring-architecture.pdf
log-monitoring-architecture.pdfSungkyun Kim
 
Android xml parsing
Android xml parsingAndroid xml parsing
Android xml parsingSangon Lee
 
7가지 동시성 모델 람다아키텍처
7가지 동시성 모델  람다아키텍처7가지 동시성 모델  람다아키텍처
7가지 동시성 모델 람다아키텍처Sunggon Song
 
Web server page_ed10
Web server page_ed10Web server page_ed10
Web server page_ed10hungrok
 
HTTP 완벽가이드- 19장 배포시스템
HTTP 완벽가이드- 19장 배포시스템HTTP 완벽가이드- 19장 배포시스템
HTTP 완벽가이드- 19장 배포시스템박 민규
 
Fluentd with MySQL
Fluentd with MySQLFluentd with MySQL
Fluentd with MySQLI Goo Lee
 
20150212 c++11 features used in crow
20150212 c++11 features used in crow20150212 c++11 features used in crow
20150212 c++11 features used in crowJaeseung Ha
 
Create-React-App으로 SSR을 구현하며 배운 점 (feat. TypeScript)
Create-React-App으로 SSR을 구현하며 배운 점 (feat. TypeScript)Create-React-App으로 SSR을 구현하며 배운 점 (feat. TypeScript)
Create-React-App으로 SSR을 구현하며 배운 점 (feat. TypeScript)LanarkSeung
 
Startup JavaScript 8 - NPM, Express.JS
Startup JavaScript 8 - NPM, Express.JSStartup JavaScript 8 - NPM, Express.JS
Startup JavaScript 8 - NPM, Express.JSCirculus
 
Laravel 로 배우는 서버사이드 #3
Laravel 로 배우는 서버사이드 #3Laravel 로 배우는 서버사이드 #3
Laravel 로 배우는 서버사이드 #3성일 한
 

Similar to 파이썬 웹프로그래밍 1탄 (20)

파이썬 플라스크 이해하기
파이썬 플라스크 이해하기 파이썬 플라스크 이해하기
파이썬 플라스크 이해하기
 
막하는 스터디 첫 번째 만남 Node.js
막하는 스터디 첫 번째 만남 Node.js막하는 스터디 첫 번째 만남 Node.js
막하는 스터디 첫 번째 만남 Node.js
 
Angular2 router&http
Angular2 router&httpAngular2 router&http
Angular2 router&http
 
파이썬 유용한 라이브러리
파이썬 유용한 라이브러리파이썬 유용한 라이브러리
파이썬 유용한 라이브러리
 
파이썬 크롤링 모듈
파이썬 크롤링 모듈파이썬 크롤링 모듈
파이썬 크롤링 모듈
 
[Hello world 오픈세미나]open api client개발
[Hello world 오픈세미나]open api client개발[Hello world 오픈세미나]open api client개발
[Hello world 오픈세미나]open api client개발
 
Web App Security 2015.10
Web App Security 2015.10Web App Security 2015.10
Web App Security 2015.10
 
하이퍼레저 페이지 단위 블록 조회
하이퍼레저 페이지 단위 블록 조회하이퍼레저 페이지 단위 블록 조회
하이퍼레저 페이지 단위 블록 조회
 
log-monitoring-architecture.pdf
log-monitoring-architecture.pdflog-monitoring-architecture.pdf
log-monitoring-architecture.pdf
 
Android xml parsing
Android xml parsingAndroid xml parsing
Android xml parsing
 
7가지 동시성 모델 람다아키텍처
7가지 동시성 모델  람다아키텍처7가지 동시성 모델  람다아키텍처
7가지 동시성 모델 람다아키텍처
 
Web server page_ed10
Web server page_ed10Web server page_ed10
Web server page_ed10
 
HTTP 완벽가이드- 19장 배포시스템
HTTP 완벽가이드- 19장 배포시스템HTTP 완벽가이드- 19장 배포시스템
HTTP 완벽가이드- 19장 배포시스템
 
Fluentd with MySQL
Fluentd with MySQLFluentd with MySQL
Fluentd with MySQL
 
20150212 c++11 features used in crow
20150212 c++11 features used in crow20150212 c++11 features used in crow
20150212 c++11 features used in crow
 
4-2. ajax
4-2. ajax4-2. ajax
4-2. ajax
 
Create-React-App으로 SSR을 구현하며 배운 점 (feat. TypeScript)
Create-React-App으로 SSR을 구현하며 배운 점 (feat. TypeScript)Create-React-App으로 SSR을 구현하며 배운 점 (feat. TypeScript)
Create-React-App으로 SSR을 구현하며 배운 점 (feat. TypeScript)
 
Startup JavaScript 8 - NPM, Express.JS
Startup JavaScript 8 - NPM, Express.JSStartup JavaScript 8 - NPM, Express.JS
Startup JavaScript 8 - NPM, Express.JS
 
Node.js at OKJSP
Node.js at OKJSPNode.js at OKJSP
Node.js at OKJSP
 
Laravel 로 배우는 서버사이드 #3
Laravel 로 배우는 서버사이드 #3Laravel 로 배우는 서버사이드 #3
Laravel 로 배우는 서버사이드 #3
 

More from SeongHyun Ahn

MQTT 를 이용한 주문시스템 개선
MQTT 를 이용한 주문시스템 개선 MQTT 를 이용한 주문시스템 개선
MQTT 를 이용한 주문시스템 개선 SeongHyun Ahn
 
github : 유용한 기능들
github : 유용한 기능들 github : 유용한 기능들
github : 유용한 기능들 SeongHyun Ahn
 
카피캣으로 시작하는 오픈소스
카피캣으로 시작하는 오픈소스 카피캣으로 시작하는 오픈소스
카피캣으로 시작하는 오픈소스 SeongHyun Ahn
 
파이썬 기본 문법
파이썬 기본 문법파이썬 기본 문법
파이썬 기본 문법SeongHyun Ahn
 
파이썬 모듈 패키지
파이썬 모듈 패키지파이썬 모듈 패키지
파이썬 모듈 패키지SeongHyun Ahn
 
파이썬 파일처리 및 문자열 처리
파이썬 파일처리 및 문자열 처리 파이썬 파일처리 및 문자열 처리
파이썬 파일처리 및 문자열 처리 SeongHyun Ahn
 
실용주의 머신러닝 CNN MNIST TENSORBOARD
실용주의 머신러닝 CNN MNIST TENSORBOARD실용주의 머신러닝 CNN MNIST TENSORBOARD
실용주의 머신러닝 CNN MNIST TENSORBOARDSeongHyun Ahn
 
Pycon APAC 2016 후기
Pycon APAC 2016 후기Pycon APAC 2016 후기
Pycon APAC 2016 후기SeongHyun Ahn
 
Introduction of scrum 안성현 20120606
Introduction of scrum 안성현 20120606Introduction of scrum 안성현 20120606
Introduction of scrum 안성현 20120606SeongHyun Ahn
 
디자인 패턴 데코레이터 패턴
디자인 패턴 데코레이터 패턴디자인 패턴 데코레이터 패턴
디자인 패턴 데코레이터 패턴SeongHyun Ahn
 
파이썬 스터디 15장
파이썬 스터디 15장파이썬 스터디 15장
파이썬 스터디 15장SeongHyun Ahn
 
파이썬 스터디 9장
파이썬 스터디 9장파이썬 스터디 9장
파이썬 스터디 9장SeongHyun Ahn
 
빠르게 활용하는 파이썬3 스터디(ch1~4)
빠르게 활용하는 파이썬3 스터디(ch1~4)빠르게 활용하는 파이썬3 스터디(ch1~4)
빠르게 활용하는 파이썬3 스터디(ch1~4)SeongHyun Ahn
 

More from SeongHyun Ahn (14)

MQTT 를 이용한 주문시스템 개선
MQTT 를 이용한 주문시스템 개선 MQTT 를 이용한 주문시스템 개선
MQTT 를 이용한 주문시스템 개선
 
github : 유용한 기능들
github : 유용한 기능들 github : 유용한 기능들
github : 유용한 기능들
 
카피캣으로 시작하는 오픈소스
카피캣으로 시작하는 오픈소스 카피캣으로 시작하는 오픈소스
카피캣으로 시작하는 오픈소스
 
파이썬 기본 문법
파이썬 기본 문법파이썬 기본 문법
파이썬 기본 문법
 
파이썬 모듈 패키지
파이썬 모듈 패키지파이썬 모듈 패키지
파이썬 모듈 패키지
 
파이썬 파일처리 및 문자열 처리
파이썬 파일처리 및 문자열 처리 파이썬 파일처리 및 문자열 처리
파이썬 파일처리 및 문자열 처리
 
파이썬 소개
파이썬 소개 파이썬 소개
파이썬 소개
 
실용주의 머신러닝 CNN MNIST TENSORBOARD
실용주의 머신러닝 CNN MNIST TENSORBOARD실용주의 머신러닝 CNN MNIST TENSORBOARD
실용주의 머신러닝 CNN MNIST TENSORBOARD
 
Pycon APAC 2016 후기
Pycon APAC 2016 후기Pycon APAC 2016 후기
Pycon APAC 2016 후기
 
Introduction of scrum 안성현 20120606
Introduction of scrum 안성현 20120606Introduction of scrum 안성현 20120606
Introduction of scrum 안성현 20120606
 
디자인 패턴 데코레이터 패턴
디자인 패턴 데코레이터 패턴디자인 패턴 데코레이터 패턴
디자인 패턴 데코레이터 패턴
 
파이썬 스터디 15장
파이썬 스터디 15장파이썬 스터디 15장
파이썬 스터디 15장
 
파이썬 스터디 9장
파이썬 스터디 9장파이썬 스터디 9장
파이썬 스터디 9장
 
빠르게 활용하는 파이썬3 스터디(ch1~4)
빠르게 활용하는 파이썬3 스터디(ch1~4)빠르게 활용하는 파이썬3 스터디(ch1~4)
빠르게 활용하는 파이썬3 스터디(ch1~4)
 

Recently uploaded

A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)Tae Young Lee
 
캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스
 
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionMOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionKim Daeun
 
Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)Wonjun Hwang
 
Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)Wonjun Hwang
 
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Kim Daeun
 

Recently uploaded (6)

A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)
 
캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차
 
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionMOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
 
Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)
 
Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)
 
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
 

파이썬 웹프로그래밍 1탄

  • 1. 안성현(@SH84AHN) 웹 관련 프로그래밍 1탄 클라이언트 만들기 1
  • 3. urllib2 패키지 3 http, ftp 서버와의 상호작용이 필요한 클라이언트 작성시 사용. 웹 페이지, 자동화 도구, 프록시, 웹크롤러 등에서 데이터를 긁어오는데 주로 사용.  urllib vs. urllib2 - URL 만 vs. URL, Request urlib2.urlopen(url [, data [, timeout]]) - 요청 보내기 - url : 문자열 url, Request 클래스의 인스턴스 - data : POST 방식 전송시 폼데이터, URL 인코딩된 데이터 - timeout : 초 - 파일객체와 유사한 객체 반환
  • 4. urllib2.urlopen 4 메소드 설명 read(size) Size 만큼의 문자열 반환, 지정하지 않으면 전체 readline() 한줄의 텍스트 반환 readlines() 모든줄을 리스트로 반환 close() 연결 닫기 info() URL 과 관련된 메타정보가 있는 객체 반환 getcode() HTTP 응답코드 정수 반환 geturl() 반환 데이터의 실제 URL 반환, redirection 고려 urlopen() 함수 반환객체의 함수들
  • 5. urllib2.urlopen 5 <! DOCTYPE html> 1070 Cache-Control: private Content-Length: 65092 Content-Type: text/html; charset=utf-8 Server: Microsoft-IIS/6.0 X-AspNet-Version: 4.0.30319 X-Internal-Url: / Set-Cookie: TriggerOverlay=membership- 02|7|http://images.wolfgangsvault.com/cvfeatures/cream_clapto n_400x533.jpg; expires=Thu, 19-Jun-2014 06:04:35 GMT; path=/ Date: Thu, 19 Jun 2014 05:04:35 GMT Connection: close 200 http://www.concertvault.com/
  • 6. urllib2.Request 6 기본적인 것은 url 문자열로 호출 상세한 지정을 Request 클래스 이용 > { "foo": [ "bar" ], "q": [ "query string" ] } data 를 추가하면 post 방식으로 자동 변경 urllib2.Request(url[, data][, headers][, origin_req_host][, unverifiable])  data 추가
  • 7. urllib2.Request 7 { "Accept-Encoding": "identity", "Api-Link": "http://dev.danal.co.kr", "Api-Version": "1.0", "Connection": "close", "Content-Length": "", "Content-Type": "", "Host": "localhost:5000", "User-Agent": "Python-urllib/2.7" }  header 추가
  • 8. urllib2.Request 8 Request.add_data(data) - 요청에 데이터 추가 - POST 방식으로 변경, data 는 URL 인코딩된 데이터 Request.get_method() - http method 반환 Request.has_data() - 데이터가 있는지 확인 Request.get_data() - 요청에 데이터가 있으면 반환 Request.add_header(key, val) - 헤더정보 추가 , key 가 헤더이름, val 가 헤더값 Request.add_unredirected_header(key, header) - redirect 가 있을경우에 추가되지 않을 헤더정보 추가 Request.has_header(header) - 헤더정보가 있는지
  • 9. urllib2.Request 9 Request.get_full_url() - 전체 url 반환 Request.get_type() - url의 타입반환 Request.get_host() - 요청을 보낼 host 반환 Request.get_selector() - URL 에서 selector 부분 반환 Request.get_header(header_name, default=None) - 지정한 헤더에 대한 값 반환 Request.header_items() - 헤더정보 전체 반환 Request.is_unverifiable() - 요청을 검증할수 없는 경우 True 반환
  • 10. urllib2.build_opener 10 urlopen() 함수는 인증, 쿠키 등의 HTTP 고급 기능지원하지 않음. 커스텀 오프너를 만들어야 함. 필요한 handler 를 추가하는 방식으로 생성  여러가지 handler.. urllib2.build_opener([handler, ...]) 클래스 설명 urllib2.HTTPBasicAuthHandler 기본 http 인증 처리 urllib2.HTTPDigestAuthHandler HTTP digest 인증 처리 urllib2.HTTPCookieProcessor HTTP 쿠키처리 urllib2.HTTPHandler url을 HTTP 로 열기 urllib2.HTTPSHandler url을 HTTPS 로 열기 urllib2.HTTPRedirectHandler HTTP 페이지 전환을 처리
  • 11. urllib2.build_opener 11 기본적으로 들어있는 handler 들. ['__doc__', '__init__', '__module__', '_call_chain', '_open', 'add_handler', 'addheaders', 'close', 'error', 'handle_error', 'handle_open', 'handlers', 'open', 'process_request', 'process_response']
  • 12. urllib2.build_opener 12 암호인증이 필요하다? 기본핸들러에는 없는데? HTTPBasicAuthHandler() 를 만들어서 사용.
  • 13. urllib.install_opener 13 install_opener(opener) - handler.open() 함수가 아닌 urlopen() 으로 호출하고 싶을때. 설치.
  • 14. urlparse 14 URL 문자열 조작할때 사용 http 10.10.1.126:8090 /pages/viewpage.action pageId=3179193 None None 10.10.1.126 8090 netloc : 네트워크 위치 지정자 fragment : 앞쪽#을 뺀 지정자
  • 15. urljoin, urlsplit 15 Base URL + 지정한 URL = 절대 URL > http://10.10.1.126:8090/page > http://10.10.1.126:8090/1 params 제외, urlparse 와 동일 > SplitResult(scheme='http', netloc='10.10.1.126:8090', path='/pages/viewpage.action', query='pageId=3179193', fragment='')
  • 16. urlencode 16 urlencode(query) - query : 사전이거나 쌍들의 순서 quote  unquote quote_plus  unquote_plus ash84_jin%3D%20%40gmail.com ash84_jin%3D+%40gmail.com ash84_jin= @gmail.com ash84_jin= @gmail.com
  • 17. error 17 exception urllib2.URLError - IOError 의 서브 클래스 - reason 속성이 문제에 대한 정보를 가지고 있다. exception urllib2.HTTPError - URLError의 서브 클래스 - HTTP 프로토콜과 관련된 문제 - 인증요구와 같은 이벤트를 알리는데 사용. - HTTP Staus code, reason 속성 exception urllib.ContentTooShortError - 다운로드된 데이터의 양이 예상한것(Content-length) 적은 경우 발생
  • 18. ftplib 18 FTP 프로토콜로 클라이언트쪽 구현시 사용 class ftplib.FTP([host[, user[, passwd[, acct[, timeout]]]]]) - FTP 연결을 나타내는 객체 생성 - host 를 연결하면 자동으로 connect() 함수 호출. - user, password, acct 를 지정하면 login() 함수 호출. FTP.connect(host[, port[, timeout]]) FTP.login([user[, passwd[, acct]]]) FTP.close()
  • 19. ftplib 19 ftp.cwd(path) - 디렉토리 변경, cd.. ftp.mkd() - 서버에 새디렉토리 생성 ftp.rename(old, new) - 서버의 파일 이름 변경 ftp.pwd() - 현재 디렉토리 반환 ftp.rmd(dirname) - 해당 디렉토리 삭제 ftp.dir(dirname) - ‘LIST’ 명령 호출, 지정하지 않으면 현재 디렉토리 기준 출력 - dirname 지정하면 지정한곳으로 출력 ftp.size(filename) - 지정한 파일의 사이즈 출력
  • 20. ftplib 20 ftp.storbinary(command, file, [, blocksize]) - 이진 전송모드로 데이터 전송 - command 는 문자열, “STOR “+filename - blocksize 는 전송에 사용할 블록크기 ftp.storlines(command, file) - 텍스트 전송 모드로 데이터 전송 - command 는 문자열, “STOR “+filename
  • 21. ftplib 21 ftp.retrlines(command [, callback]) - 서버에서 명령을 실행한 결과를 텍스트로 반환 - callback 은 콜백함수 지정, 지정하지 않으면 stdout ftp.retrbianry(command, callback [, blocksizes [, rest]]) - 서버에서 실행한 결과를 이진 전송 모드로 반환 - command : “RETR ”+filename - callback : 데이터 블록 받을때 마다 호출되는 함수 - rest : 파일 오프셋
  • 22. base64 22 base64, base16, base32 인코딩을ㄹ 사용하여 이진데이터를 텍스트로 인코딩 혹은 디코딩 메일첨부나 http 프로토콜에서 이진 데이터를 추가하는데 사용 altchars : base64 출력에서 +, 을 대체하기 위한 2개의 문자열 지정 YXNoODQ6MTIzNA== ash84:1234 YXNoODQ6MTIzNA== ash84:1234 61736838343A31323334 ash84:1234 MFZWQOBUHIYTEMZU ash84:1234
  • 23. xml 23 SAX, DOM, ElementTree 인터페이스 제공 DOM : xml.dom.minidom SAX : xml.sax ElementTree : xml.etree.ElementTree
  • 24. xml.dom.minidom 24 XML 을 파싱해서 DOM 규약에 따라 메모리에 트리구조로 저장하는 기능 제공 parse, parseString() 으로 파싱 attributes firstchild lastchild nodename nodetype getElementByTagName() hasAttributes() getAttribute() documentElement() appendChild() removeChild() replaceChild()
  • 25. xml.sax 25 SAX2 API를 사용하여 API 문서를 파싱 start parsing attr : domain t1 attr : price 12000 attr : domain gs attr : domain ld attr : domain sas attr : domain 342d end parsing xml.sax.ContentHandler 의 서브클래스를 사용 일종의 handler 특정 경우에 특정 함수를 할당 - startDocuemnt : 문서 시작시 호출 - endDocuemnt : 문서 시작시 호출 - startElement : 엘리먼트 시작시 - endElement: 엘리먼트 끝날경우
  • 26. xml.etree.ElementTree 26 계층적인 데이터를 저장하고 조작하는데 사용하는 ElementTree 객체 정의 찾기 : find(), finall(), findtext(), getroot(), get(), items(), keys().. 조작 : append(), clear(), insert(), remove(), set()(..
  • 27. json 27 dump, load 함수는 파일객체 대상 dumps, loads 함수는 문자열 대상 {"habits": ["cooking", "camping", "sleeping"], "name": "ash84"} <type 'dict'> {u'habits': [u'cooking', u'camping', u'sleeping'], u'name': u'ash84'}
  • 28. json 28 object_hook : 디코딩된 결과 객체를 인수로 전달, 중간에 데이터 조작을 할 함수 지정. cls : 디코딩할 JSONDecoder 하위 클래스 지정 parse_float, parse_int : 부동소수점, 정수값 디코딩을 위한 함수 호출 지정. {u'name': u'ash8n4', 'habit': u'cooking'}
  • 29. hashlib 29 다양한 보안 해시와 MD5, SHA 등의 Message-digest 알고리즘 구현 모듈 함수 설명 md5(data) MD5 해시(128비트) sha1(data) SHA1 해시(160비트) sha224(data) SHA224 해시(226비트) shar256(data) SHA256 해시(256비트) sha384(data) SHA384 해시(384비트) sha512(data) SHA512 해시(512비트) 함수 설명 d.update(data) 새로운 데이터로 업데이트, 그러나 이어지는 것. 덮어써지는게 아니다. d.digest() 무가공 바이트 문자열로 요약 값 반환 d.hexdigest() 16진수 숫자들로 인코딩된 요약텍스트 위의 함수의 리턴 객체에 대한 함수들.
  • 31. 정리 31 urllib, urllib2 를 이용, 상세한 요청은 Request 인증, 쿠키 등의 고급 기능 => build_opener 이용, 커스텀 오프너 urlencode 는 호출시 반드시 사용. error 처리를 잘 활용하자. 401, 404, 500 XML 파싱 => 용도와 크기 고려 JSON, dump, load 만 기억 hashlib 에서 update 는 갱신이 아니라 concat