簡體   English   中英

使用python 2.7中的套接字連接到python服務器

[英]Connect to python server using sockets in python 2.7

我使用python -m SimpleHTTPServer在端口8000上創建了python服務器。

當我從網絡瀏覽器訪問此URL時,它顯示以下內容

在此處輸入圖片說明

現在,我想使用python獲取以上內容。 所以,為此,我所做的是

>>> 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進行socket programming with python的教程。 我不太喜歡官方教程。

當我嘗試使用python接收內容時,我還觀察到了一件奇怪的事情,那時候什么都沒發生,我無法從Web瀏覽器訪問localhost:8000 ,但是一旦我殺死python程序,我就可以訪問它。

可以說,通過python中的http獲取內容的最簡單方法是使用urllib2模塊。 例如:

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

這將打印出SimpleHTTPServer托管的文件。

但是在s.recv(1024)之后什么也沒有發生,它只是在那里等待並且什么也不打印。

您只需打開一個套接字並等待數據,但這不是HTTP協議的工作方式。 如果要接收響應,則必須先發送請求(基本上,必須告訴服務器要列出哪個目錄或要下載哪個文件)。 如果確實願意,可以使用原始套接字發送請求以訓練您的技能,但是強烈建議使用適當的庫(請參閱Matthew Adams的回復和urllib2示例)。

當我嘗試使用python接收內容時,我還觀察到了一件奇怪的事情,那時候什么都沒發生,我無法從Web瀏覽器訪問localhost:8000,但是一旦我殺死python程序,我就可以訪問它。

這是因為SimpleHTTServer是單線程的,並且不同時支持多個連接。 如果您要修復它,請在這里查看答案: BasicHTTPServer,SimpleHTTPServer和concurrency

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM