按需返回頁(yè)面的http服務(wù)器:
http格式:
每個(gè)HTTP請(qǐng)求和響應(yīng)都遵循相同的格式,一個(gè)HTTP包含Header和Body兩部分,其中Body是可選的。
HTTP協(xié)議是一種文本協(xié)議,所以,它的格式也非常簡(jiǎn)但
HTTP GET請(qǐng)求的格式:
? ? GET /path HTTP/1.1
? ? Header1: Value1
? ? Header2: Value2
? ? Header3: Value3
每個(gè)Header一行一個(gè),換行符是\r\n。
HTTP POST請(qǐng)求的格式:
? ? POST /path HTTP/1.1
? ? Header1: Value1
? ? Header2: Value2
? ? Header3: Value3
? ? body data goes here...
當(dāng)遇到連續(xù)兩個(gè)\r\n時(shí),Header部分結(jié)束,后面的數(shù)據(jù)全部是Body。
多線程服務(wù)器到此之前我們編寫的都是單線程的服務(wù)器端,單線程的服務(wù)器有一個(gè)壞處就是,在多人同時(shí)訪問(wèn)的時(shí)候會(huì)很緩慢。例如做個(gè)試驗(yàn):在單線程的服務(wù)器端調(diào)用sleep方法讓線程休眠3秒鐘,然后運(yùn)行服務(wù)器端,接著打開幾個(gè)瀏覽器同時(shí)進(jìn)行訪問(wèn),會(huì)發(fā)現(xiàn)第一個(gè)瀏覽器停頓了3秒左右,第二個(gè)瀏覽器停頓了6秒左右,第三個(gè)瀏覽器停頓了9秒左右,這樣以此類推的話速度實(shí)在太慢不忍直視。所以這時(shí)候就需要用到多線程來(lái)編寫多線程服務(wù)器了,多線程就能同時(shí)的進(jìn)行處理訪問(wèn)的客戶端,而且在真正的開發(fā)中也不可能會(huì)用到單線程的服務(wù)器。
圖片下載:
import urllib.request
def main():
req = urllib.request.urlopen("https://rpic.douyucdn.cn/asrpic/191118/520_0058.png")
img_content = req.read()
with open('1.jpg','wb') as f:
f.write(img_content)
if __name__ == "__main__":
main()