2012-07-04 4 views
0

python -m SimpleHTTPServer을 사용하여 8000 포트에 파이썬 서버를 만들었습니다. 내 웹 브라우저에서이 URL을 방문 할 때파이썬에서 소켓을 사용하여 파이썬 서버에 연결하기 2.7

그것은

enter image description here

지금, 나는 파이썬을 사용하여 위의 콘텐츠를하려면 아래의 내용을 보여줍니다. 그래서, 그것을 위해 내가 한 일은

>>> import socket 
>>> s = socket.socket(
...  socket.AF_INET, socket.SOCK_STREAM) 
>>> s.connect(("localhost", 8000)) 
>>> s.recv(1024) 

입니다 그러나 s.recv(1024) 아무 일도 발생하지 후에는 그냥 기다려 아무것도 출력하지 않습니다.

그래서 내 질문은 디렉토리 내용 위에 python을 사용하여 출력하는 방법입니다. 또한 어떤 사람이 나에게 socket programming with python에 대한 자습서를 제안 할 수 있습니다. 나는 공식 튜토리얼을 그다지 좋아하지 않았다.

파이썬을 사용하여 내용을 수신하려고 시도 할 때 이상한 일이 발생했습니다. 그 때 웹 브라우저에서 localhost:8000에 액세스 할 수 없지만 액세스 할 수있는 파이썬 프로그램을 죽이면 아무 일도 일어나지 않습니다.

+1

필요한 프로토콜은 소켓 프로그래밍이 아니라 HTTP 프로토콜 사양입니다. 또한, 무엇을 위해 프로그램을 작성 하느냐에 따라 HTTP를 사용하는 모듈을 사용할 수 있습니다. – deStrangis

답변

4

아마도 파이썬에서 http를 통해 콘텐츠를 얻는 가장 간단한 방법은 urllib2 모듈을 사용하는 것입니다. 예 :

from urllib2 import urlopen 
f = urlopen('http://localhost:8000') 
for line in f: 
    print line 

이렇게하면 SimpleHTTPServer에서 호스팅하는 파일이 인쇄됩니다.

+0

그래서 소켓을 사용하여 달성하려는 것이 무엇인지 이해한다면? – RanRag

+1

@Noob 글쎄, 당신이하려는 일에 소켓이 필요하지만 직접 사용하지 않아도됩니다. 기본적으로 IP는 소켓을 사용하고 TCP는 IP를 사용하고 HTTP는 TCP를 사용합니다. 웹 사이트의 데이터에 액세스하기 위해 모든 정보를 다시 작성하고 싶지는 않습니다. –

3

그러나 s.recv (1024) 이후에는 아무 일도 일어나지 않고 아무것도 인쇄하지 않습니다.

단순히 소켓을 열고 데이터를 기다리지 만 HTTP 프로토콜 작동 방식이 아닙니다. 응답을 받으려면 먼저 요청을 보내야합니다 (기본적으로 서버에 어떤 디렉토리를 나열 할 것인지 또는 어떤 파일을 다운로드 할 것인지 서버에 알려야합니다). 정말로 원한다면 원시 소켓을 사용하여 요청을 보내 기술을 습득 할 수 있지만 적절한 라이브러리를 사용하는 것이 좋습니다 (Matthew Adams의 응답 및 urllib2 예제 참조). 내 웹 브라우저에서 8000하지만 곧 내가 내 파이썬 프로그램을 죽일 나는 그것을 액세스 할 수 있습니다 내가 파이썬 아무것도 내가 로컬 호스트에 액세스 할 수없는 그 시간에 일을 사용하여 내용을받을 때

은 또한 이상한 일을 관찰했다.

SimpleHTTServer는 단일 스레드이며 동시에 여러 연결을 지원하지 않기 때문입니다. 문제를 해결하려면 BasicHTTPServer, SimpleHTTPServer and concurrency의 답변을 살펴보십시오.

관련 문제