运行WHOIS脚本时出现TypeError: a bytes-like object is required, not 'str'错误怎么办?
WHOIS脚本报错:TypeError: a bytes-like object is required, not 'str'
问题描述
我正在编写一个基础的WHOIS脚本,但无法正常运行。在Linux终端执行时,返回错误:
"TypeError: a bytes-like object is required, not 'str'",错误指向代码行:
s.send(sys.argv[1]+"\r"+"\n")。
consulta.py
#!/usr/share/python import socket import sys import pyfiglet ascii_banner = pyfiglet.figlet_format("WHOIS - Gustang") print (ascii_banner) reg = "whois.godaddy.com" if len(sys.argv) == 2: s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((reg, 43)) s.send(sys.argv[1]+"\r"+"\n") resp = s.recv(1024) print (resp) else: print ("Modo de Uso: IPv4 + Porta") print ("Exemplo: 255.255.255.255 21")
问题原因
Python的socket.send()方法要求传入**字节类型(bytes)**的数据,而你当前传入的是字符串(str)类型,类型不匹配直接触发报错。
解决方案
- 将发送的字符串通过
encode()方法编码为字节类型(推荐用UTF-8编码); - 接收的响应是字节类型,用
decode()解码为字符串,输出更易读; - 修正使用提示:WHOIS查询不需要端口参数,只需传入域名或IP地址即可。
修改后的完整代码
#!/usr/share/python import socket import sys import pyfiglet ascii_banner = pyfiglet.figlet_format("WHOIS - Gustang") print(ascii_banner) reg = "whois.godaddy.com" if len(sys.argv) == 2: s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((reg, 43)) # 编码为字节后发送 s.send((sys.argv[1] + "\r\n").encode('utf-8')) resp = s.recv(1024) # 解码为字符串后打印 print(resp.decode('utf-8')) s.close() # 新增:用完socket后关闭连接 else: print("使用方式:域名/IP地址") print("示例:google.com 或 8.8.8.8")
内容的提问来源于stack exchange,提问作者Gustang
相关产品推荐
相关产品推荐

