python还原短连接的真实链接

链接: 原文:还原短链接的真实链接

import requests

http_headers = { 'Accept': '*/*','Connection': 'keep-alive', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36'}

def get_real_url(url):
    rs = requests.get(url,headers=http_headers,timeout=10)
    return rs.url

详细内容请查看原文链接: 还原短链接的真实链接

### Python 使用 TCP/IP 协议传输数组 在 Python 中,可以通过 `socket` 库实现基于 TCP/IP 的网络通信。为了通过 TCP/IP 传输数组,通常需要将数组序列化为二进制数据流以便在网络上传输,并在接收端反序列化还原成原始数组。 以下是具体方法以及示例代码: #### 方法概述 1. **序列化与反序列化**:使用标准库中的 `pickle` 或者更高效的第三方库如 `msgpack` 来处理复杂的数据结构(如列表、字典等)。这些工具能够将任意可序列化的 Python 对象转换为字节流。 2. **分隔消息边界**:为了避免粘包问题,可以在每条消息前附加固定长度的消息头来指示实际有效载荷的大小。 3. **编码与解码**:如果涉及字符串或其他特殊类型的对象,则需要注意其编码方式,默认情况下推荐 UTF-8 编码。 下面是一个完整的例子展示如何利用 TCP 套接字发送和接受整数型一维 NumPy 数组[^5]。 #### 客户端代码 (Sender) ```python import socket import pickle import numpy as np def send_array(host='localhost', port=9000): array_to_send = np.array([1, 2, 3, 4]) # 创建要传送的一维NumPy数组 with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock: sock.connect((host, port)) serialized_data = pickle.dumps(array_to_send) # 将数组转为bytes length_of_message = len(serialized_data).to_bytes(4, 'big') # 记录消息体长度并转化为大端序byte形式 sock.sendall(length_of_message + serialized_data) # 发送先发长度再发真实内容 if __name__ == "__main__": send_array() ``` #### 服务器端代码 (Receiver) ```python import socket import pickle BUFFER_SIZE = 4096 def receive_array(port=9000): with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as server_sock: server_sock.bind(('localhost', port)) server_sock.listen() conn, addr = server_sock.accept() # 阻塞直到有连接进来为止 msg_length_raw = conn.recv(4) # 接收到的第一个四字节表示后续payload的实际尺寸 if not msg_length_raw: raise ConnectionError('Client closed connection prematurely.') expected_payload_size = int.from_bytes(msg_length_raw[:4], byteorder='big') received_chunks = [] bytes_received_so_far = 0 while bytes_received_so_far < expected_payload_size: chunk = conn.recv(min(BUFFER_SIZE, expected_payload_size - bytes_received_so_far)) if not chunk: break received_chunks.append(chunk) bytes_received_so_far += len(chunk) full_payload = b''.join(received_chunks) deserialized_object = pickle.loads(full_payload) # 反序列化得到原生Python对象即numpy.ndarray类型变量 print(f'Received Array from client: {deserialized_object}') if __name__ == '__main__': receive_array() ``` 以上程序展示了基本流程,其中包含了必要的错误检测逻辑以应对可能发生的异常情况比如客户端突然断开链接等问题[^1][^5]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值