response.read() returns an instance of bytes while StringIO is an in-memory stream for text only. Use BytesIO instead.
From What’s new in Python 3.0 – Text Vs. Data Instead Of Unicode Vs. 8-bit
The
StringIOandcStringIOmodules are gone. Instead, import theiomodule and useio.StringIOorio.BytesIOfor text and data respectively.