Python 을 사용 하여 간단 한 HTTP 와 FTP 서 비 스 를 만 듭 니 다.

6700 단어 python
Python 을 사용 하여 간단 한 HTTP 와 FTP 서 비 스 를 만 듭 니 다.
업무 중 에 도 다른 장소 에서 도 파일 공유 에 대한 수요 가 자주 발생 한다. 예 를 들 어 자신 이 4GB 의 게임 을 내 렸 고 동료 가 800 MB 의 소프트웨어 를 내 렸 다. 다른 사람들 도 이런 파일 이 필요 하 다 면 직접 공유 하 는 것 이 가장 빠 르 고 편리 하 며 친 환경 적 인 방식 이다. 다시 내리 면 시간 도 낭비 하고 전기 도 낭비 할 것 이다.Windows 는 폴 더 공유 기능 을 가지 고 있 습 니 다. 그러나 이 물건 은 아직 까지 자세히 고생 한 적 이 없고 원 리 를 이해 하지 못 했 습 니 다. 저 는 FTP 를 사용 하여 파일 을 공유 해 왔 습 니 다. 필요 하 다 면 HTTP 서 비 스 를 하 는 것 도 충분히 대처 할 수 있 습 니 다. 제 목적 은 파일 공유 일 뿐 이 고 간단 하고 사용 하기 쉬 운 것 이 제 주요 관심 사 입 니 다.
이런 수 요 는 반드시 매우 보편적 이 고 해결 방법 도 다양 하 다.예 를 들 어 비둘기 가 책 을 전달 하거나 QQ, 또는 각종 랜 통신 소프트웨어 와 네트워크 디스크 가 모두 가능 합 니 다. 그러나 이런 것들 은 모두 점 대 점 의 조작 이 필요 합 니 다. 즉, 상대방 이 어떤 서 류 를 필요 로 하 는 지 이 서 류 를 보 내야 합 니 다. 한 사람 이 많 으 면 한 번 더 보 내야 합 니 다. 다시 사용 할 수 없습니다. 프로그래머 에 게 는 받 아들 일 수 없고 반복 적 으로 수 치 스 럽 습 니 다!저 는 파일 서버 가 이런 수요 에 더욱 부합된다 고 생각 합 니 다. 현재 많은 성숙 한 소프트웨어 가 이러한 수 요 를 편리 하 게 실현 할 수 있 습 니 다. 예 를 들 어 FTP 는 FileZilla 을 선택 할 수 있 고 HTTP 는 Apache, Nginx 를 선택 할 수 있 습 니 다. 물론 성숙 은 복잡 하고 더 큰 학습 비용, 더 많은 디스크 점용 을 의미 합 니 다. 당신 의 수요 의 복잡 도 를 볼 수 있 습 니 다.
죽 을 때 까지 고생 하 다.
자, 저 는 설명 이 필요 합 니 다. 저 는 괴 롭 히 는 것 을 좋아 하 는 사람 입 니 다. 복잡 하고 학습 원가 가 높 아 보 이 는 일 을 간단 하고 사용 하기 쉬 운 것 이 제 궁극 적 인 취미 입 니 다. 이 글 은 바로 이런 괴 롭 힌 결과 물이 고 목적 을 직접 달성 하고 자 합 니 다. 성숙 한 소프트웨어 는 당신 의 가장 좋 은 귀착점 입 니 다.괴 롭 히 는 것 을 좋아한다. 프로그래머 가 좋아 하 는 말 은 복잡 한 실현 을 좋 은 이름 의 인터페이스 에 숨 기 는 것 이다.다시 말 하면 자동차 내부 의 구조 가 우수 하고 구조 가 복잡 하 며 핸들, 브레이크 와 액셀러레이터 만 조작 하면 이 를 잘 조종 할 수 있다. 이것 은 모두 이런 우호 적 인 인터페이스 가 이 루어 진 덕분이다.
같은 일 은 한 번 만 있 으 면 된다.평소에 코드 를 쓰 는 것 도 마찬가지다.만약 내 가 다른 사람 이 제공 하 는 인터페이스 가 필요 하 다 면, 나 는 이 인 터 페 이 스 를 사용 하 는 것 이 가능 한 한 간단 하 기 를 바란다. 나 는 어떤 인 터 페 이 스 를 호출 하고 어떤 인 자 를 전달 하 는 지 만 알 면 된다.저 는 코드 를 작성 할 때 반드시 이런 생각 에 따라 사용자 가 제 가 어떻게 실현 하 는 지 에 관심 을 가 져 야 한다 고 생각 하지 않 습 니 다. 그것 은 제 문제 입 니 다. 사용자 가 관심 을 가 져 야 할 것 은 이 인터페이스 가 무엇 을 하 는 지, 어떤 매개 변수 가 필요 한 지, 돌아 올 수 있 는 결과 와 던 질 수 있 는 오류, 분업 이 명확 하고 불필요 한 소통 을 줄 여야 합 니 다.
저 는 앞의 글 에서 Python - 지정 한 폴 더 의 as 파일 의 완전 한정 클래스 내 보 내기 을 언급 했 습 니 다. 좋 은 점 은 더 이상 말 하지 않 겠 습 니 다. 한 글자, 섹시!공교롭게도 나 는 이 파일 공유 기능 을 괴 롭 혔 을 때 그 를 만 났 고, 이 기 회 를 빌려 HTTP 와 FTP 방면 의 내용 을 다시 한 번 복습 했다.
파 이 썬 버 전 HTTP 서버
잡담 은 그만 하고 먼저 Python 을 설 치 했 는 지 확인 하 세 요. 저 는 2. x 버 전 을 설 치 했 습 니 다. 맞습니다. 제 운영 체 제 는 WIN 7 입 니 다. 사실은 Python 에 게 어떤 운영 체제 가 중요 하지 않 습 니 다.Python 에 간단 한 HTTP 서버 가 내장 되 어 있 습 니 다. 명령 행 아래 에서 명령 을 두 드 리 기만 하면 HTTP 서버 가 일어 납 니 다.
python -m SimpleHTTPServer 80


뒤의 80 포트 는 선택 할 수 있 으 며, 채 우지 않 으 면 부족 한 포트 8000 을 사용 할 것 이다.현재 있 는 폴 더 를 기본 웹 디 렉 터 리 로 설정 하고 브 라 우 저 에서 이 컴퓨터 주 소 를 입력 해 보십시오.
http://localhost:80


현재 폴 더 에 index. html 파일 이 있 으 면 이 파일 을 기본적으로 표시 합 니 다. 그렇지 않 으 면 디 렉 터 리 에 있 는 모든 파일 을 파일 목록 으로 표시 합 니 다.이렇게 하면 가장 기본 적 인 파일 공유 의 목적 을 실현 할 수 있 습 니 다. 스 크 립 트 를 만 들 고 단축 키 를 만 들 면 파일 공 유 를 편리 하 게 시작 할 수 있 습 니 다.더 많은 수요 가 있 으 면 자신의 수요 에 따라 맞 춤 형 제작 을 할 수 있 습 니 다. 구체 적 인 것 은 공식 문서 SimpleHTTPServer 를 참조 하거나 소스 코드 를 직접 보 세 요.나 는 한 단락 을 복사 해서 참고 하기 편리 하 다.
import SimpleHTTPServer

import SocketServer



PORT = 8000



Handler = SimpleHTTPServer.SimpleHTTPRequestHandler



httpd = SocketServer.TCPServer(("", PORT), Handler)



print "serving at port", PORT

httpd.serve_forever()


파 이 썬 버 전 FTP 서버
이 곳 을 보면 기본적으로 Python 이 설치 되 어 있 지만 다른 좋 은 도 구 를 설치 해 야 합 니 다.Chrome 플러그 인 을 찾 아야 할 때 Google 웹 스토어 로 가 는 것 을 알 고 있 습 니 다.Firefox 애플 리 케 이 션 을 찾 아야 할 때 Mozilla 의 add - ons 로 갑 니 다.Python 구성 요 소 를 찾 아야 할 때 pip:A tool for installing and managing Python packages 설치 방법 은 소개 하지 않 습 니 다.
Python 에 직접 사용 할 수 있 는 FTP 서버 가 내장 되 어 있 지 않 기 때문에 제3자 구성 요소 의 지원 이 필요 합 니 다. 제 가 찾 은 이 구성 요 소 는 pyftpdlib 입 니 다. 먼저 설치 하 십시오.
pip install pyftpdlib


설치 후 HTTP 서버 와 유사 합 니 다. 다음 명령 을 실행 하면 FTP 서버 를 시작 할 수 있 습 니 다.
python -m pyftpdlib -p 21


뒤의 21 포트 는 여전히 선택 할 수 있 습 니 다. 채 우지 않 으 면 무 작위 로 사용 되 고 사용 되 는 포트 는 건 너 갑 니 다.브 라 우 저 에서 이 컴퓨터 주 소 를 입력 하 십시오:
ftp://localhost:21


이때 익명 으로 접근 합 니 다. 즉, 사용자 이름 은 anonymous 입 니 다. 비밀 번 호 는 비어 있 습 니 다. 접근 권한 을 제어 하려 면 서버 를 맞 춰 야 합 니 다. 구체 적 인 것 은 pyftpdlib Tutorial 을 참조 하 십시오. 제 가 여기 서 복사 해서 소개 하 겠 습 니 다.
from pyftpdlib.authorizers import DummyAuthorizer

from pyftpdlib.handlers import FTPHandler

from pyftpdlib.servers import FTPServer



def main():

    # Instantiate a dummy authorizer for managing 'virtual' users

    authorizer = DummyAuthorizer()



    # Define a new user having full r/w permissions and a read-only

    # anonymous user

    authorizer.add_user('user', '12345', '.', perm='elradfmwM')

    authorizer.add_anonymous(os.getcwd())



    # Instantiate FTP handler class

    handler = FTPHandler

    handler.authorizer = authorizer



    # Define a customized banner (string returned when client connects)

    handler.banner = "pyftpdlib based ftpd ready."



    # Specify a masquerade address and the range of ports to use for

    # passive connections.  Decomment in case you're behind a NAT.

    #handler.masquerade_address = '151.25.42.11'

    #handler.passive_ports = range(60000, 65535)



    # Instantiate FTP server class and listen on 0.0.0.0:2121

    address = ('', 2121)

    server = FTPServer(address, handler)



    # set a limit for connections

    server.max_cons = 256

    server.max_cons_per_ip = 5



    # start ftp server

    server.serve_forever()



if __name__ == '__main__':

    main()


코드 만 보면 어떻게 사용 해 야 하 는 지 기본적으로 알 수 있 을 것 입 니 다. adduser 는 분명히 사용 자 를 추가 하 는 것 입 니 다. 2121 은 지정 한 포트 입 니 다. 물론 무 작위 로 도 사용 할 수 있 습 니 다. 그리고 최대 연결 수 maxcons 도 있 습 니 다. 모든 ip 의 최대 연결 제한 은 docstring 을 직접 보 는 것 이 좋 습 니 다.
후기
Python 제3자 구성 요 소 는 큰 보고 입 니 다. 기본적으로 제 가 직면 한 대부분의 문 제 는 이 안에서 해결 문안 을 찾 을 수 있 습 니 다.또한 괴 롭 히 기 를 좋아 하 는 프로그래머, 심지어 프로그램 배경 이 없 는 IT 직원 들 도 이 언어 를 배 워 보 는 것 이 문제 해결 능력 과 사고 단련 에 큰 도움 이 된다.

좋은 웹페이지 즐겨찾기