python模擬簡單瀏覽器以及Web伺服器

2021-10-01 23:47:51 字數 3274 閱讀 3574

"""

1. 匯入模組

2. 創捷套接字

3. 建立連線

4. 拼接請求協議

5. 傳送請求協議

6. 接收伺服器響應內容

7. 儲存內容

8. 關閉連線

"""# 1. 匯入模組

import socket

# 2. 創捷套接字

tcp_client = socket.socket(socket.af_inet, socket.sock_stream)

# 3. 建立連線

))# web預設埠

# 4.拼接請求協議

# 請求協議:

# 1)請求行

# 2)請求頭

# 3)請求空行

request_black =

'\r\n'

# 整體拼接

request_data = request_line + request_header + request_black

# 5. 傳送請求協議

# 請求報文預設字串,需要編碼成二進位制

tcp_client.send(request_data.encode())

# 6.接收伺服器響應內容

recv_data = tcp_client.recv(

4096

)# 4096= kb

print

(recv_data)

# 解碼接收到的二進位制資料

recv_text = recv_data.decode('')

print

(recv_text)

# 7. 儲存內容

# 查詢位置\r\n\r\n

locations = recv_text.find(

'\r\n\r\n'

)# 擷取

loc_data = recv_text[locations:

]# 儲存內容到檔案

with

open

('index.html'

,'w')as

file

:file

.write(loc_data)

# 8. 關閉連線

tcp_client.close(

)

"""

tcp服務端

1.匯入模組

2.建立套機字

3.繫結埠

4.設定位址重用

5.設定監聽,主動邊被動

6.接受客戶端連線 定義函式

7.接受客戶端傳送的請求報文

8.判斷協議是否為空

9.拼接響應的報文

10.傳送響應報文

11.關閉套接字

"""def

request_handler

(new_client_socket, ip_port)

:"""

接受資訊並作出響應

:return:

"""# 7.接受客戶端傳送的請求報文

# 8.判斷協議是否為空

request_data = new_client_socket.recv(

1024

)# print(request_data)

ifnot request_data:

print

('%s客戶端已經下線!'

%str

(ip_port)

) new_client_socket.close(

)return

# 9.拼接響應的報文

# 相應行

# 響應頭

response__header =

'server:python20ws/2.1\r\n'

# 響應空行

response_blank =

'\r\n'

# 響應主體

response__body =

'helloworld!'

# 連線成乙個主體

response__data = response_line + response__header + response_blank + response__body

# 10.傳送響應報文

new_client_socket.send(response__data.encode())

# 關閉當前連線

new_client_socket.close(

)def

main()

:# 1.匯入模組

import socket

# 2.建立套機字

tcp_service_socket = socket.socket(socket.af_inet, socket.sock_stream)

# 3.設定位址重用

# sol_socket:當前套接字,so_reuseaddr:位址重用

tcp_service_socket.setsockopt(socket.sol_socket, socket.so_reuseaddr,

true

)# 4.繫結埠

tcp_service_socket.bind((''

,8080))

# 5.設定監聽,主動邊被動

tcp_service_socket.listen(

128)

# 6.接受客戶端連線定義函式

while

true

: new_client_socket, ip_port = tcp_service_socket.accept(

) request_handler(new_client_socket, ip_port)

# 11.關閉套接字

# tcp_service_socket.close()

if __name__ ==

'__main__'

: main(

)

web伺服器響應為『helliworld』的報文主體,在瀏覽器中輸入『127.0.0.1:8080』 即可檢視到從伺服器接受到的響應報文『helloworld』.

python爬蟲2之簡單模擬瀏覽器

有時在利用爬蟲爬取一些 時,會出現403錯誤 forbidden。這是因為一些 進行了一些反爬蟲的設定。於是需要將爬蟲偽裝成瀏覽器,可以設定user agent資訊。以下介紹兩種讓爬蟲模擬成瀏覽器訪問 的方法。1使用build opener 修改報頭。5步 import urllib.request...

pc瀏覽器模擬手機瀏覽器

很多 都通過user agent來判斷瀏覽器型別,如果是3g手機,顯示手機頁面內容,如果是普通瀏覽器,顯示普通網頁內容 谷歌chrome瀏覽器,可以很方便地用來當3g手機模擬器。在windows的 開始 執行 中輸入以下命令,啟動 谷歌瀏覽器,即可模擬相應手機的瀏覽器去訪問3g手機網頁 谷歌andr...

Python爬蟲模擬瀏覽器示例

抓取 網頁中的所有出版社的名稱。網頁如圖 方法1 import re import urllib.request from urllib.request import urlopen,request pattern 使用正規表示式抽取,輸出的東西在 之中 headers 模擬瀏覽器 ret requ...