一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - Python中使用socket發送HTTP請求數據接收不完整問題解決方法

Python中使用socket發送HTTP請求數據接收不完整問題解決方法

2020-05-22 08:50腳本之家 Python

這篇文章主要介紹了Python中使用socket發送HTTP請求數據接收不完整問題解決方法,本文使用一個循環解決了數據不完整問題,需要的朋友可以參考下

由于工作的需求,需要用python做一個類似網絡爬蟲的采集器。雖然Python的urllib模塊提供更加方便簡潔操作,但是涉及到一些底層的需求,如手動設定User-Agent,Referer等,所以選擇了直接用socket進行設計。當然,這樣的話,需要對HTTP協議比較熟悉,HTTP協議這里就不做講解了。整個python的代碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/usr/bin env python
import socket
host="www.baidu.com"
se=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
se.connect((host,80))
se.send("GET / HTTP/1.1\n")
se.send("Accept:text/html,application/xhtml+xml,*/*;q=0.8\n")
#se.send("Accept-Encoding:gzip,deflate,sdch\n")
se.send("Accept-Language:zh-CN,zh;q=0.8,en;q=0.6\n")
se.send("Cache-Control:max-age=0\n")
se.send("Connection:keep-alive\n")
se.send("Host:"+host+"\r\n")
se.send("Referer:http://www.baidu.com/\n")
se.send("user-agent: Googlebot\n\n")
print se.recv(1024)

代碼運行正常,但是發現一個比較重要的問題,運行結果只返回了HTTP的頭部信息,網頁的內容則沒有被返回。網上查找了很多資料,一無所獲,經過一夜的思考,突然想到了一個問題,有可能我請求的資源非常大,一個網絡的IP包的大小,它是受很多因素制約的,最典型的便是MTU(最大傳輸單元),那么會不會我請求的數據被分割了,HTTP的頭部信息只是一部分,其它數據還在傳輸或者緩沖區呢?于是做了這樣一個遍歷:

?
1
2
3
4
5
while True:
  buf = se.recv(1024)
  if not len(buf):
    break
  print buf

這樣發現所有請求的數據均被返回了,看來要想做好網絡編程,深入理解TCP/IP協議是非常必要的。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 欧美特黄视频在线观看 | 本站只有精品 | 欧美成人香蕉在线观看 | 国产一卡2卡3卡四卡精品网 | 欧美亚洲国产另类在线观看 | 欧乱色国产精品兔费视频 | 我和岳偷长篇小说 | 亚洲欧美专区精品久久 | 黑人巨鞭大战白妞10级 | 三年片韩国在线观看 | 国产成人精品日本亚洲网站 | 99久久精品国内 | 久久精品国产免费播放 | 亚洲福利天堂 | 精品视频久久久久 | 黑人干亚洲人 | 亚洲国产在线播放 | 亚洲国产成人精品无码区99 | 美女和男生搞基 | 精品国产国产精2020久久日 | 亚洲人和日本人hd | 亚洲欧美日韩天堂在线观看 | 亚洲邪恶天堂影院在线观看 | 亚洲国产天堂综合一区 | 99热精品在线播放 | 日本激情小说 | 久草在线福利资站免费视频 | 亚洲另类第一页 | 九九热视频免费 | 国产区1 | 国产欧美日韩精品高清二区综合区 | 舔比小说| 精品丰满人妻无套内射 | 国产色综合久久五月色婷婷中文 | 黑人与老女人做受 | 69日本人| 果冻传媒新在线观看免费 | 亚洲激情 欧美 | 女毛片 | 成人欧美一区在线视频在线观看 | 久久青草免费91线频观看站街 |