首页 > 解决方案 > TypeError:需要一个类似字节的对象,而不是请求中的“str”有什么问题?

问题描述

import requests
funciona = "0"
nofunciona = "0"
url = 'http://testphp.vulnweb.com/userinfo.php'
values = {'uname': 'test', 'pass': 'test'}
r = requests.post(url, data=values)

if "John" in r.content:
   funciona = 1
else:
   nofunciona = 1

print(r.content)
print(funciona)
print(nofunciona)
Console: Traceback (most recent call last):
  File "main.py", line 11, in <module>
    if "John" in r.content:
TypeError: a bytes-like object is required, not 'str'

标签: pythonstringtestingpython-requests

解决方案


这里的问题是,bytes并且str是两种不同的类型。

写入字节: my_bytes = b'somebytes'

字符串是这样写的: my_string = 'somestring'

所以"John"在你的代码中是 astr并且r.content是类型bytes。您需要匹配的类型才能使此布尔表达式起作用。

所以要么你需要说,b"John" in r.content要么用适当的编解码器(如 UTF-8、ASCII 等)解码的内容的字符串版本在"John" in r.text哪里。r.text


推荐阅读