python基础(16):网络编程 之 几个网络模块

几个网络模块




一、socket模块


套接字分为两类:

  • 服务器套接字
  • 客户端套接字

套接字是模块socket中socket类的实例。
实例化套接字时最多可指定三个参数(创建普通套接字时,不用提供任何参数):

  • 一个地址族(默认为socket.AF_INET);
  • 是流套接字(socket.SOCK_STREAM,默认设置)还是数据报套接字
    (socket.SOCK_DGRAM);
  • 协议(使用默认值0就好)。

1. 实现最简单的服务器和客户端

最简单的服务器 and 最简单的客户端
import socket 
s = socket.socket()  # 创建普通套接字
host = socket.gethostname() 
port = 1234 
s.bind((host, port))  # 1.服务器套接字先调用方法bind
s.listen(5)  # 2.调用方法listen来监听特定的地址(接收一个参数——待办任务清单的长度,即:最多可有多少个连接在队列中等待接纳,达到这个数量后开始拒绝连接)
while True: 
	 c, addr = s.accept()  # 4.接收客户端连接:将阻断(等待)到客户端连接到来为止,然后返回一个格式为(client, address)的元组,其中client是一个客户端套接字,而address是前面解释过的地址。服务器能以其认为合适的方式处理客户端连接,然后再次调用accept以接着等待新连接到来。这通常是在一个无限循环中完成的。
	 print('Got connection from', addr) 
	 c.send('Thank you for connecting')  # 5.发送数据:调用方法send并提供一个字符串
	 c.close()
import socket 
s = socket.socket() 
host = socket.gethostname() 
port = 1234 
s.connect((host, port))  # 3.当服务器套接字调用方法listen来监听特定的地址后,客户端套接字就可以连接到服务器了:调用方法connect并提供调用方法bind时指定的地址
print(s.recv(1024))  # 6.接收数据:调用recv并指定最多接收多少个字节的数据。如果不确定该指定什么数字,1024是个不错的选择。

然后服务器将产生如下结果:

Got connection from ('172.20.248.65', 60192)
Traceback (most recent call last):
   File "<stdin>", line 4, in <module>
TypeError: a bytes-like object is required, not 'str'

显然,产生了一个错误,经查阅,发现:

socket.send(bytes[, flags])

显然 ’ Thank you for connecting ’ 是 str ,不是 byte-like object(类似byte的object),而 python提供了 bytes 和 str 类型转换函数:encode()decode()

  • str → bytes: encode()
  • bytes → str:decode()
  • 【补充】 如果我们从网络或磁盘上读取了字节流,那么读到的数据就是bytes。

修改服务器代码:

import socket 
s = socket.socket()  # 创建普通套接字
host = socket.gethostname() 
port = 1234 
s.bind((host, port))  # 1.服务器套接字先调用方法bind
s.listen(5)  # 2.调用方法listen来监听特定的地址(接收一个参数——待办任务清单的长度,即:最多可有多少个连接在队列中等待接纳,达到这个数量后开始拒绝连接)
while True: 
	 c, addr = s.accept()  # 4.接收客户端连接:将阻断(等待)到客户端连接到来为止,然后返回一个格式为(client, address)的元组,其中client是一个客户端套接字,而address是前面解释过的地址。服务器能以其认为合适的方式处理客户端连接,然后再次调用accept以接着等待新连接到来。这通常是在一个无限循环中完成的。
	 print('Got connection from', addr) 
	 c.send('Thank you for connecting'.encode())  # 发送数据
	 c.close()

运行结果如下:
在这里插入图片描述

二、模块 urllib 和 urllib2


1. 作用

让你能够通过网络访问文件,就像这些文件位于你的计算机中一样。

  • 简单的下载 → urllib
  • 如果需要实现HTTP身份验证或Cookie,抑或编写扩展来处理自己的协议 → urllib2

2. 使用

2.1 打开远程文件

2.1.1 打开本地文件 vs 打开远程文件
打开本地文件打开远程文件
提供的功能可读可写只能使用读取模式
实现方法open & file模块 urllib.request 中的函数urlopen

2.1.2 实现代码(实例)
>>> from urllib.request import urlopen
# 变量webpage将包含一个类似于文件的对象,这个对象与网页http://www.python.org相关联
>>> webpage = urlopen('http://www.python.org')

# urlopen返回的类似于文件的对象支持方法close、read、readline和readlines,还支持代等。
>>> # webpage.read()
>>> b'<!doctype html>\n<!--[if lt IE 7]>   <html class="no-js ie6 lt-ie7 lt-ie8 lt-ie9">   <![endif]-->\n<!--[if IE 7]>      <html class="no-js ie7 lt-ie8 lt-ie9">          <![endif]-->\n<!--[if IE 8]>      <html class="no-js ie8 lt-ie9">                 <![endif]-->\n<!--[if gt IE 8]><!--><html class="no-js" lang="en" dir="ltr">  <!--<![endif]-->\n\n<head>\n    <meta charset="utf-8">\n    <meta http-equiv="X-UA-Compatible" content="IE=edge">\n\n    <link rel="prefetch" href="//ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js">\n\n    <meta name="application-name" content="Python.org">\n    <meta name="msapplication-tooltip" content="The official home of the Python Programming Language">\n    <meta name="apple-mobile-web-app-title" content="Python.org">\n    <meta name="apple-mobile-web-app-capable" content="yes">\n    <meta name="apple-mobile-web-app-status-bar-style" content="black">\n\n    <meta name="viewport" content="width=device-width, initial-scale=1.0">\n    <meta name="HandheldFriendly" content="True">\n    <meta name="format-detection" content="telephone=no">\n    <meta http-equiv="cleartype" content="on">\n    <meta http-equiv="imagetoolbar" content="false">\n\n    <script src="/static/js/libs/modernizr.js"></script>\n\n    <link href="/static/stylesheets/style.67f4b30f7483.css" rel="stylesheet" type="text/css" title="default" />\n    <link href="/static/stylesheets/mq.3ae8e02ece5b.css" rel="stylesheet" type="text/css" media="not print,
...

# 提取所打开网页中链接About的相对URL
>>> import re 
>>> text = webpage.read() 
>>> m = re.search(b'<a href="([^"]+)" .*?>about</a>', text, re.IGNORECASE) 
>>> m.group(1) 
'/about/'

[ 注意 ]  

  1. urlopen返回的类似于文件的对象,支持方法closereadreadlinereadlines,还支持迭代等。
  2. cmd 清屏:cls
  3. cmd 退出 python :exit()

2.2 下载远程文件
>>> from urllib.request import urlretrieve
>>> urlretrieve('http://www.python.org','F:\\study\\work\\python_webpage.html')
('F:\\study\\work\\python_webpage.html', <http.client.HTTPMessage object at 0x000001F1D3387B70>)

[ 注意 ]  

  • urlretrieve
    • 返回一个格式为(filename, headers)的元组 。
      • filename:本地文件的名称
      • headers :包含一些有关远程文件的信息
    • 如果要给下载的副本指定文件名,可通过第二个参数来提供 。
      • 目录必须“\\”
      • 一定要写上文件名
    • 如果没有指定文件名(没有给第二个参数):
      • 下载的副本将放在某个临时位置,可使用函数open来打开。
      • 使用完毕后,你可能想将其删除,以免占用磁盘空间。要清空这样的临时文件,可调用函数urlcleanup(),它将负责替你完成清空工作。

2.3 其他一些实用函数

除了通过 URL 读取和下载文件外,urllib 还提供了一些用于操作 URL 的函数:

  • quote(string[, safe]):返回一个字符串,其中所有的特殊字符(在URL中有特殊意义的字符)都已替换为对URL友好的版本(如将~替换为%7E)。如果要将包含特殊字符的字符串用作URL,这很有用。参数safe是一个字符串(默认为’/’),包含不应像这样对其进行编码的字符。
  • quote_plus(string[, safe]):类似于quote,但也将空格替换为加号。
  • unquote(string):与quote相反。
  • unquote_plus(string):与quote_plus相反。
  • urlencode(query[, doseq]):将映射(如字典)或 由包含两个元素的元组(形如(key, value))组成的序列转换为“使用URL编码的”字符串。这样的字符串可用于CGI查询中。

[ 参考链接 ]

 1. send()参数问题参考链接:https://blog.csdn.net/wx1458451310/article/details/78593994

 2. [挪]-Magnus-Lie-Hetland-Python基础教程(第3版)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python网络编程是指使用Python语言进行网络通信的编程。Python提供了许多库和模块来实现网络编程,例如socket、asyncio、http.client等。其中,socket是Python中最基本的网络编程模块,它提供了底层的网络通信接口,可以用来实现各种网络协议的通信。asyncio是Python 3.4版本之后新增的异步编程库,它提供了高效的异步I/O操作,可以用来实现高并发的网络应用。http.client是Python中用于HTTP协议通信的模块,可以用来实现HTTP客户端和服务器端的通信。 在Python中进行网络编程,需要了解网络协议、套接字、IP地址、端口号等相关概念。网络协议是指计算机网络中通信双方遵循的规则和标准,例如TCP/IP协议、HTTP协议等。套接字是网络编程中的一个重要概念,它是网络通信的基础,用于建立网络连接、发送和接收数据等操作。IP地址是用于标识网络中计算机的唯一地址,端口号则是用于标识网络中进程的唯一标识符。 在Python中进行网络编程,需要掌握以下几个方面的知识: 1. 套接字编程:包括套接字的创建、绑定、监听、连接、发送和接收数据等操作。 2. 并发编程:包括多线程、多进程、协程等技术,用于实现高并发的网络应用。 3. 网络协议:包括TCP/IP协议、HTTP协议等,需要了解协议的基本原理和使用方法。 4. 网络安全:包括加密、认证、防火墙等技术,用于保障网络通信的安全性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值