文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Python网络编程:十个网络通信的实用脚本

2024-11-29 18:42

关注

1. 简单的HTTP GET请求

目标:获取网页内容。

import requests

url = 'https://www.example.com'
response = requests.get(url)

# 输出网页内容
print(response.text)

解析:requests.get()发送HTTP GET请求,返回的对象包含响应数据。这里我们打印了网页的HTML源码。

2. POST数据到服务器

实践:

data = {'key': 'value'}
response = requests.post('https://httpbin.org/post', data=data)
print(response.json())

注意:使用POST方法时,数据通过data参数传递,服务器响应通常以JSON格式返回,使用json()方法解析。

3. 网络套接字基础

原理:套接字是网络通信的基础,Python的socket模块提供了套接字编程接口。

import socket

client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect(('www.google.com', 80))
client.sendall(b'GET / HTTP/1.1\r\nHost: google.com\r\n\r\n')
response = client.recv(4096)

print(response.decode('utf-8'))

关键点:创建套接字(socket.AF_INET用于IPv4,SOCK_STREAM用于TCP),连接服务器,发送请求,接收响应。

4. 端口扫描小工具

实践:

import socket

def port_scanner(host, port):
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sock.settimeout(5)  # 设置超时时间
    try:
        sock.connect((host, port))
        print(f'Port {port} is open.')
    except (socket.timeout, ConnectionRefusedError):
        pass
    finally:
        sock.close()

port_scanner('localhost', 80)

提示:通过设置超时和异常处理,实现简单的端口扫描,注意礼貌扫描,避免对目标服务器造成不必要的负担。

5. UDP广播消息

应用场景:局域网内设备发现。

import socket

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
sock.sendto(b'Hello, network!', ('', 5005))

解读:使用UDP发送广播消息,适用于不需要确认的广泛信息传播。

6. 文件传输(FTP客户端)

实践:使用Python的ftplib实现简单的FTP下载。

from ftplib import FTP

def download_file(ftp, remote_path, local_path):
    with open(local_path, 'wb') as f:
        ftp.retrbinary('RETR ' + remote_path, f.write)
        
ftp = FTP('ftp.example.com')
ftp.login(user='username', passwd='password')
download_file(ftp, '/path/to/file.txt', 'local_file.txt')
ftp.quit()

关键点:登录FTP服务器,使用retrbinary方法下载文件。

7. 简易Web服务器

实践:基于http.server模块创建。

from http.server import HTTPServer, BaseHTTPRequestHandler

class SimpleHTTPRequestHandler(BaseHTTPRequestHandler):
    def do_GET(self):
        self.send_response(200)
        self.end_headers()
        self.wfile.write(b'Hello, Web!')

server_address = ('', 8000)
httpd = HTTPServer(server_address, SimpleHTTPRequestHandler)
print("Server running on http://localhost:8000")
httpd.serve_forever()

说明:监听本地8000端口,任何GET请求都会收到“Hello, Web!”的响应。

8. 多线程处理HTTP请求

提升效率:

import requests
from concurrent.futures import ThreadPoolExecutor

urls = ['http://example.com'] * 10  # 示例URL列表
with ThreadPoolExecutor(max_workers=5) as executor:
    responses = list(executor.map(requests.get, urls))

for response in responses:
    print(response.status_code)

技巧:利用并发处理多个HTTP请求,提高效率。

9. 基于Socket的简单聊天室

实践(服务器端):

import socket
import threading

def handle_client(client_socket):
    while True:
        message = client_socket.recv(1024).decode('utf-8')
        if not message:
            break
        print(f"Received: {message}")
        client_socket.sendall(message.encode('utf-8'))
    client_socket.close()

server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(('localhost', 12345))
server.listen()

print("Server listening...")
while True:
    client, addr = server.accept()
    print(f"Accepted connection from {addr}")
    client_handler = threading.Thread(target=handle_client, args=(client,))
    client_handler.start()

客户端类似,简化处理收发逻辑。

10. 实战案例:简易网络爬虫

目标:抓取网页上的链接。

import requests
from bs4 import BeautifulSoup

url = 'https://www.example.com'
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')

links = [a['href'] for a in soup.find_all('a', href=True)]
print(links)

分析:结合requests和BeautifulSoup进行网页内容解析,提取所有链接。注意遵守robots.txt规则,尊重网站政策。

结语

通过这10个实用脚本,你已经掌握了Python网络编程的基本技能,从简单的请求发送到复杂的网络服务搭建,每一步都是通往更广阔编程世界的关键步伐。

来源:PythonAI与图像处理内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯