kevin1024 / vcrpy

Automatically mock your HTTP interactions to simplify and speed up testing
MIT License
2.71k stars 388 forks source link

POSTing binary data as bytes or bytearray instead of BytesIO breaks assumptions baked into replace_post_data_parameters #660

Open fiendish opened 2 years ago

fiendish commented 2 years ago

This sequence https://github.com/kevin1024/vcrpy/blob/f3f66086a149722812345aaf1bb304ff39d105ef/vcr/filters.py#L110-L116 assumes that anything that isn't a BytesIO or dict or with content-type json that is splittable by b"=" can be UTF-8 decoded. But any random unlucky binary data is likely to have a b"=" somewhere in it, and, if passed in as a raw byte array instead of a BytesIO, it then chokes that decode with 'utf-8' codec can't decode...blah blah blah if the user has defined filter_post_data_parameters for their recorder.

The BytesIO check in https://github.com/kevin1024/vcrpy/blob/f3f66086a149722812345aaf1bb304ff39d105ef/vcr/filters.py#L86 is insufficient for preventing exceptions from trying to decode binary data.

samamorgan commented 1 year ago

~I suspect this is due to a downstream change in the requests library. It didn't seem to happen with v2.28.1~

Edit: I was wrong, tried downgrading and it made no difference.

samamorgan commented 1 year ago

Here's a sample request body that is causing an error.

--7ac9dc7b70e1c10c8b48844f6dd76995
Content-Disposition: form-data; name="files"; filename="image.jpg"
Content-Type: image/jpeg

\xff\xd8\xff\xe1\x00\xe8Exif\x00\x00MM\x00*\x00\x00\x00\x08\x00\x06\x01\x12\x00\x03\x00\x00\x00\x01\x00\x01\x00\x00\x01\x1a\x00\x05\x00\x00\x00\x01\x00\x00\x00V\x01\x1b\x00\x05\x00\x00\x00\x01\x00\x00\x00^\x01(\x00\x03\x00\x00\x00\x01\x00\x02\x00\x00\x02\x13\x00\x03\x00\x00\x00\x01\x00\x01\x00\x00\x87i\x00\x04\x00\x00\x00\x01\x00\x00\x00f\x00\x00\x00\x00\x00\x00\x00\x90\x00\x00\x00\x01\x00\x00\x00\x90\x00\x00\x00\x01\x00\x08\x90\x00\x00\x07\x00\x00\x00\x040221\x91\x01\x00\x07\x00\x00\x00\x04\x01\x02\x03\x00\x92\x86\x00\x07\x00\x00\x00\x12\x00\x00\x00\xcc\xa0\x00\x00\x07\x00\x00\x00\x040100\xa0\x01\x00\x03\x00\x00\x00\x01\x00\x01\x00\x00\xa0\x02\x00\x04\x00\x00\x00\x01\x00\x00\x00\x80\xa0\x03\x00\x04\x00\x00\x00\x01\x00\x00\x00\x80\xa4\x06\x00\x03\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00ASCII\x00\x00\x00Screenshot\x00\x00\xff\xe2\x02\x18ICC_PROFILE\x00\x01\x01\x00\x00\x02\x08appl\x04\x00\x00\x00mntrRGB XYZ \x07\xe7\x00\n\x00\x19\x00\x08\x00&\x00\x1eacspAPPL\x00\x00\x00\x00APPL\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf6\xd6\x00\x01\x00\x00\x00\x00\xd3-appl\xb7\xd7%\xfbQl\x18\xbe\xa9\x1f\x13\xd8Lj\x94\xc9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ndesc\x00\x00\x00\xfc\x00\x00\x00.cprt\x00\x00\x01,\x00\x00\x00Pwtpt\x00\x00\x01|\x00\x00\x00\x14rXYZ\x00\x00\x01\x90\x00\x00\x00\x14gXYZ\x00\x00\x01\xa4\x00\x00\x00\x14bXYZ\x00\x00\x01\xb8\x00\x00\x00\x14rTRC\x00\x00\x01\xcc\x00\x00\x00\x10chad\x00\x00\x01\xdc\x00\x00\x00,bTRC\x00\x00\x01\xcc\x00\x00\x00\x10gTRC\x00\x00\x01\xcc\x00\x00\x00\x10mluc\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x0cenUS\x00\x00\x00\x12\x00\x00\x00\x1c\x00L\x00G\x00 \x00H\x00D\x00R\x00 \x004\x00K\x00\x00mluc\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x0cenUS\x00\x00\x004\x00\x00\x00\x1c\x00C\x00o\x00p\x00y\x00r\x00i\x00g\x00h\x00t\x00 \x00A\x00p\x00p\x00l\x00e\x00 \x00I\x00n\x00c\x00.\x00,\x00 \x002\x000\x002\x003XYZ \x00\x00\x00\x00\x00\x00\xf6\xd6\x00\x01\x00\x00\x00\x00\xd3-XYZ \x00\x00\x00\x00\x00\x00y\xd7\x00\x008Q\x00\x00\x00\\XYZ \x00\x00\x00\x00\x00\x00T\xd9\x00\x00\xbaP\x00\x00\x0b\x9bXYZ \x00\x00\x00\x00\x00\x00(&\x00\x00\r`\x00\x00\xc75para\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\xf6\x04sf32\x00\x00\x00\x00\x00\x01\x0cr\x00\x00\x05\xf8\xff\xff\xf3\x1d\x00\x00\x07\xba\x00\x00\xfdr\xff\xff\xfb\x9d\xff\xff\xfd\xa4\x00\x00\x03\xd9\x00\x00\xc0q\xff\xdb\x00\x84\x00\x01\x01\x01\x01\x01\x01\x02\x01\x01\x02\x03\x02\x02\x02\x03\x04\x03\x03\x03\x03\x04\x06\x04\x04\x04\x04\x04\x06\x07\x06\x06\x06\x06\x06\x06\x07\x07\x07\x07\x07\x07\x07\x07\x08\x08\x08\x08\x08\x08\t\t\t\t\t\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x01\x02\x02\x02\x03\x03\x03\x05\x03\x03\x05\x0b\x08\x06\x08\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\xff\xdd\x00\x04\x00\x08\xff\xc0\x00\x11\x08\x00\x80\x00\x80\x03\x01"\x00\x02\x11\x01\x03\x11\x01\xff\xc4\x01\xa2\x00\x00\x01\x05\x01\x01\x01\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x10\x00\x02\x01\x03\x03\x02\x04\x03\x05\x05\x04\x04\x00\x00\x01}\x01\x02\x03\x00\x04\x11\x05\x12!1A\x06\x13Qa\x07"q\x142\x81\x91\xa1\x08#B\xb1\xc1\x15R\xd1\xf0$3br\x82\t\n\x16\x17\x18\x19\x1a%&\'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz\x83\x84\x85\x86\x87\x88\x89\x8a\x92\x93\x94\x95\x96\x97\x98\x99\x9a\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\x01\x00\x03\x01\x01\x01\x01\x01\x01\x01\x01\x01\x00\x00\x00\x00\x00\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x11\x00\x02\x01\x02\x04\x04\x03\x04\x07\x05\x04\x04\x00\x01\x02w\x00\x01\x02\x03\x11\x04\x05!1\x06\x12AQ\x07aq\x13"2\x81\x08\x14B\x91\xa1\xb1\xc1\t#3R\xf0\x15br\xd1\n\x16$4\xe1%\xf1\x17\x18\x19\x1a&\'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x92\x93\x94\x95\x96\x97\x98\x99\x9a\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xff\xda\x00\x0c\x03\x01\x00\x02\x11\x03\x11\x00?\x00\xf3\x98|;\xadN2\x96\xef\x8f\xa6*\xfax7^q\xfe\xa8\x0f\xa9\xc5[\x9b\xc7Z\xcc\x9f\xea\xc4h=\x85Qo\x17\xeb\xed\xd2}\xbf@+\xf4\x9d\x0f\xe6\x7f|\xb1\xff\x00\x08F\xbf\xfd\xc4\xff\x00\xbe\x851\xbc\x17\xaf/\xfc\xb3_\xc1\x85U\xff\x00\x84\xaf\xc4\x1f\xf3\xf2\x7f!\xfe\x14\xe1\xe2\xcf\x10\x0f\xf9x\'\xf0\x1f\xe1F\x81\xef\x91\xc9\xe1\x8dv1\x93n\xc7\xe9Yr\xd8\xde\xdb\x1f\xdfD\xc9\xf8WI\x17\x8d\xf5\xc8\xfa\x94o\xaa\xd6\xa4>?\x9c\x8d\x97\x96\xea\xe3\xbe\x0e?J4\x1d\xe5\xd8\xe3-\xb5=F\xc9\xb3m+&=\xeb\xa4\xb5\xf1\xce\xaf\x06\x04\xfbe\x03\xd4b\xb6\xbf\xb5\xfc\x1b\xaa\xfc\xb7\x90y,{\xed\xc7\xfe\x83H|#\xa0\xea\x1f6\x95w\x8c\xf6\xc8o\xd3\x8a=\tmuCc\xf1\xcd\x8c\x83\x17v\x99\xfab\x9e<A\xe1\x19\xbf\xd7\xda\x81\xff\x00\x01\xac\xe9\xbe\x1f\xeaK\xfe\xa2X\xd8{\xe4\x7fJ\xcd\x7f\x05\xeb\xe9\xf7bV\xfa0\xa3QZ\x07I\xfd\xab\xe0_\xf9\xf7\x1f\xf7\xc5\x1f\xdb\x1e\x08NR\xdcq\xfe\xc5r\xbf\xf0\x87\xf8\x8b\xfe}\xbf\xf1\xe5\xff\x00\x1ap\xf0w\x88\x8f\xfc\xbb\xe3\xfe\x04\xbf\xe3@\xed\x1e\xe7M\xff\x00\to\x87\xad\xf9\xb6\xb4\xcf\xe0\x05T\x9b\xc7\xb3\x01\x8b;uO\xadg\xc5\xe0]nO\xbd\xe5\xa7\xd4\xff\x00\x80\xadX|\x00Po\xbe\xb9T\x03\xfb\xa3\xfcqOQ{\x88\xe6\xae\xfcS\xad\xdep\xd3\x14\x1e\x8b\xc5a\x96\x9e\xe1\xb9\xdc\xe7\xf3\xafH\xfe\xcf\xf0N\x93\xcd\xc4\xbe{\x0e\xd9\xdd\xff\x00\xa0\xd3\x1b\xc6zE\x97\xcb\xa5\xd9\xf4\xeep\xbf\xcb4\xacR\x7f\xca\x8f\xff\xd0\xcc\x1e\x0f\xd0m\xc6n\xae\xff\x00QJ4\x8f\x04\xc7\xc4\x93\x83\xff\x00\x025\xe6\xaa\x92\xcc~@X\xd5\xb4\xd2\xb57\xfb\x96\xf2\x1f\xa2\x9a\xfd$\xfeg\xe5\xf3=\x03\xec\x1e\x01\xff\x00\x9e\xa3\xfe\xfa4\x7ffx\x15\xbe\xe4\xc0\x7f\xc0\x8dp\x9f\xd8z\xcf\xfc\xfaM\xff\x00|\x1f\xf0\xa6\x1d\x1fV_\xbdm(\xff\x00\x80\x1f\xf0\xa3\xe4\x1c\xbegy\xff\x00\x08\xbf\x86.8\xb7\xbb\xc7\xe2?\xadV\x97\xc0E\xc6\xeb\x1b\x95oc\xff\x00\xd6\xae\x06Kk\x88\x7f\xd6\xa1_\xa8\xc5>+\xbb\xa80a\x91\x97\x1e\x86\x8d\x03\x95\xf4f\xed\xdf\x84u\xbbN|\xad\xe0\x7fw\x9a\xc0xnm\xce$VB=\xb1]\x05\xa7\x8b\xf5\xbb\\\x03\'\x98=\x18WA\x17\x8em\xa7\x1bu+@\xde\xe3\x07\xf9\xd1\xa0^K\xa1\xc5A\xacj\xb6\xfcCp\xea=\x01\xad\x14\xf1f\xbd\x1fI\xc9\xfa\x80k\xab\xfe\xd0\xf0-\xdf3E\xe5\x9f\xf7O\xf4\xa0i\xde\x05\x9b\xee\xcc\x17\xfe\x05\x8a\x05u\xd8\xe6\xff\x00\xe13\xf1\x00\xff\x00\x96\xc3\xfe\xf9\x1f\xe1Mo\x18\xf8\x81\xbf\xe5\xb0\xfc\x14\x0f\xe9]?\xf6\x0f\x82O"\xec\x7f\xdf\xd5\xa3\xfb\x17\xc1\x11\xf2n\x81\xc7\xfd4\x14\x05\xe3\xd8\xe3e\xf1.\xb9(\xc1\xb9q\xf48\xac\xa9nn\xae\x1b\xf7\xae\xce}\xcek\xd1\xbc\xbf\x01Z\xf2\xcc\x1f\xf3?\xca\x93\xfe\x12o\x0cX\x8cXZ\xee?\xee\x8c~\xb4Xj]\x91\xc2\xda\xe8\xfa\x9d\xe1\xc5\xbc,\x7f\x0cWIk\xe0MR\\\x1b\x86X\x87\xe7R\\\xf8\xf3Pq\xb6\xd2$\x88~u\xcd\\\xeb\xba\xbd\xdf\xfa\xe9\xdb\xf0\xe3\xf9Q\xa0\xfd\xe3\xff\xd1\xcb\x7f\x1f\xc3\x18\xd9ik\x80=O\xf4\x02\xa9\xbf\xc4\x1b\xff\x00\xf9g\x04c\xeb\x9aH\xbc\x01|Fg\x99\x13\xda\xae\'\x80"\xff\x00\x96\xb7X\xfa\n\xfd+S\xf9\x97\xdcE\x0f\xf8X\x1a\xaf\xfc\xf1\x8b\xf2?\xe3N_\x88:\x97\xf1C\x17\xe1\x9f\xf1\xad\x1f\xf8@\xac\x7f\xe7\xec\xfeB\x9a|\x03k\xfc\x17\x7f\xa0\xa5\xa8^\x04q\xfcB~\x93[\x02=\x8e*_\xf8I\xbc/}\xc5\xfd\xa6\xdc\xf7\xda\rT\x7f\x87\xf7\x1f\xf2\xc6\xe1\x0f\xd4VU\xc7\x82u\xb8\x011\xaa\xc8\x07\xf7O\xf4\xa3P\xb4\r\xff\x00\xec_\x07\xea|\xd8\xcf\xe51\xed\x9f\xf1\xaa\x17\x1e\x02\xbd\x03u\x94\xc9 \xed\x9e+\x8f\xb8\xd3u\x0b#\x8b\x98Z<z\x8au\xb6\xab\xa8\xd9\x9c\xdb\xcc\xcb\x8fz\n\xe5}\x19\xa57\x85u\xd8N<\x82\xc3\xfd\x9a\xce}#S\x8f\xef@\xff\x00\x95m\xc1\xe3Mv\x11\x82\xea\xff\x00\xef\n\xd1\x8f\xc7\xfa\x8a\xff\x00\xac\x89\x1b\xf4\xa3@\xf7\x8e7\xfb>\xfb\xfex?\xfd\xf2i\xc3M\xd4\x0fH\x1f\xfe\xf95\xdb\xff\x00\xc2\xc2\xbb\xff\x00\x9fd\xfc\xe9\xad\xf1\x06\xf0\xfd\xdbt\x1f\x8d\x16C\xbc\xbb\x1c\xacz\x06\xb3/\x11\xdb\xb7\xf2\xadko\x05ks\xfd\xf5X\xc7\xfbF\xacI\xe3\xbda\xbf\xd5\xaa/\xe1\x9a\xc8\xb8\xf1>\xb7r0\xf3\x90\x0fe\xe2\x8d\x05\xef\x1dT~\t\xb0\xb4\x1b\xf5K\xb0\x00\xec0*Q7\x81t\xce\x15\x04\xe4{n\xfe|W\x9c3\xdc\xdc\xb7\xccY\xcf\xe7Z\xd6\xbe\x1a\xd6\xee\xc01@\xc0z\xb7\xca(\xf4\x07\x1e\xec\xff\xd2\xf2\xe9uMJ\x7f\xf5\xb3\xc8\x7f\xe0G\x15M\xa4\x91\xfe\xfb\x13\xf5\xafK\xfe\xd6\xf0U\xa8\xc4\x10\x07#\xfd\x9a\x07\x8c4(x\x86\xd3\x8f\xa0\xaf\xd2l\x7f3\xf3vG\x98\xd3\x832\xfd\xd3\x8a\xf4\xef\xf8Nt\xaf\xf9\xf3?\xa5\'\xfc&\xba3\xfd\xeb3\xfaQd\x1c\xcf\xb1\xe7q\xdf\xdfE\xfe\xaag_\xa3\x11Z\x96\xfe(\xd7m\xb1\xb2\xe0\xb0\x1d\x9b\x06\xba\xef\xed\xef\x07\xdcqql\x17\xfe\x03G\xd9|\x0f\xa8\x7f\xaa\x7f(\x9e\x9c\xed\xfd(\x172\xea\x8av\xbe>\xba\x03\xcb\xbf\x81$^\x9f/\x1f\xe3W\x86\xad\xe0\xbdO\xfe? \xf2X\xf7\xdb\x8f\xfd\x06\xabM\xe0X\xa5\x1b\xf4\xdb\x95a\xd8\x1f\xfe\xb5s\xd7^\x12\xd7-\x7f\xe5\x96\xf1\xfe\xcf4\xf5\x17\xb9\xd0\xea\x7f\xe1\x1c\xf0\x8d\xe76\xb7[=\xb7\x0f\xea)\x87\xc0vR\x7f\xa8\xbc\xfd\x01\xfe\xb5\xe7\xd2Y^@q,L\xbf\x85E\xbad\xeeE"\xb9_Fz/\xfc+\xb6=.\xc7\xfd\xf1\xff\x00\xd7\xa3\xfe\x15\xf2\xaf\xfa\xcb\xc1\x8f\xf71\xfdk\xce\xbc\xf9\xbf\xbe\x7f:<\xe9\x8f\x1b\x8f\xe7F\x81\xcb.\xe7\xa4\x0f\x06h\x90\xf3u{\xc7\xb1U\xa5\x16\x9e\x04\xd3\xff\x00\xd6\xbf\x9cG\xa9\'\xf9`W\x9bl\x99\xf8\xc15\xa1o\xa2j\xb7_\xea r>\x94\x07/vv\xef\xe3-\x1e\xc4l\xd2,\xc0\xf7\xc0_\xe5Xw^7\xd6\xe7?\xb9+\x08\xff\x00e\x7f\xc75=\xaf\x81uI~k\x96X\x87\xe7Z\xcb\xe1\x7f\x0eXc\xfbJ\xeb\'\xd38\xa3Q{\x88\xff\xd3\xe1!\xf0\x8e\xbf0\xcf\x91\xb4{\x90*\xfc~\x04\xd6\x9c|\xc65\xfa\x9f\xf0\x15Ro\x18\xeb\xd3t\x94 \xff\x00d\x01T_\xc4\x9a\xe3\xff\x00\xcb\xcb\x8f\xa1\xc5~\x93\xa1\xfc\xcf\xef\x1b\xff\x00\xf0\xaf\xf5\x7f\xf9\xeb\x0f\xe6\x7f\xf8\x9aa\xf0\x0e\xb2:<G\xe8O\xf8W?\xfd\xbf\xad\xff\x00\xcf\xd4\xbf\xf7\xd1\xa7/\x88u\xb5\xff\x00\x97\xa9?\xef\xaa4\x1d\xa4h\xc9\xe0\xcd~?\xbb\x10\x7f\xa3\x0f\xfe\xb5d\xdch\x9a\xb5\xaf\xfa\xebw\x03\xd8d~\x95\xa1\x1f\x8bu\xe8\x8eD\xf9\xfa\x80kV\x0f\x1ej\x89\xc5\xc2$\x83\xe9\x8a4\x0fx\xe3\xa2\xb8\xba\xb5o\xdc\xbbFG\xa1\xc5t\x16\xbe0\xd7-p\x0c\x82@;8\xff\x00\x0cWH<S\xe1\xedDm\xd5-p}p\r/\xf6\x1f\x84u>l\xa7\xf2\x89\xed\x9f\xf1\xa2\xdd\x84\xda\xfbH\xaf\x17\xc4\x19\xb6\xed\xb9\xb6V\xfa\x1c~\x98\xab\x0b\xe3M\x15\xff\x00\xd7\xd9~AMW\x93\xc0,\xdc\xda\\\xab\x0e\xdcU\x07\xf0\x1e\xb0\xbfp\xa1\xfcqOR}\xc3k\xfe\x12\xcf\x0bw\xb2?\xf7\xed?\xc6\x90\xf8\xbf\xc3K\xfe\xae\xc8\xfb|\x88+\x03\xfe\x10mw\xd1?\xef\xaap\xf0.\xb9\xdc \xff\x00\x81R\x1d\xa1\xdc\xd9>;\xb3\x8b\x9b[<\x1f\xa8_\xe4+6\xe3\xc7\xba\xac\x9c@\x89\x18\xfc\xcdI\x17\x805\x16\xff\x00[*\'\xebWc\xf0V\x99n7_\xdd\x8e=0)\xea/p\xe3.\xb5\xed^\xf3\xfd|\xed\x8fA\xc7\xf2\xaa\x11[]]6 \x8d\xa4?\xec\x8c\xd7\xa2\xf9\xbe\x08\xd2~\xe2\xf9\xec?\xe0U\x0c\xde<H\xbeM>\xd9T\x0e\x99\xff\x00\xebR\xb1I\xff\x00*?\xff\xd4\xcd\xfe\xc3\xf0e\xa7\x17\x17A\x8f\xfb\xe3\xf9\n\x07\xfc \x10\xf0p\xdf\xf7\xd1\xfeU\xe7\xd1\xe9\xd7\xf2\xff\x00\xab\x85\xcf\xfc\x06\xae\xa7\x87u\xb9\x07\xc9l\xd5\xfaI\xfc\xcf\xcb\xe6v\xbfi\xf8}\xfd\xc1\xff\x00|\xbd\x1eo\xc3\xf98\x00/\xe0\xc2\xb8\xff\x00\xf8E\xf5\xff\x00\xf9\xf5o\xd2\x9a\xde\x1a\xd7W\xad\xb3~\x94|\x85\xca\xbb\x9d\x80\xd3<\rs\xc2O\xb3\xfe\x05\x8f\xe7H\xde\x08\xd3n\x86\xed:\xef>\x83\x83\xfc\xab\x83\x93I\xd4\xa2\xfb\xf08\xfc*\xa1Y\xa0l\x90P\x8f\xc2\x81\xf2\xf6gYw\xe0}j\xdf&\x10\xb3\x01\xfd\xd3\x8f\xe7\x8a\xe6\xeet\xeb\xfb#\x8b\xa8^<z\x8cV\x85\xa7\x89u\xbb<yS\xb1\x03\xb3|\xc3\xf5\xae\x96\xd7\xc7\xf7J6\xde@\xae?\xd9\xe2\x8d\x07\xef#\x86\x8e\xf2\xee/\xf5r\xb2\xfd\r_\x8f_\xd6b\xfb\x97\x0e+\xb6\xff\x00\x84\x93\xc2w\x7f\xf1\xf9h\x14\xff\x00\xb8\r\x02O\x01O\xf7\x94\'\xe6?\x95\x16\'\x9b\xbcN@x\xa3_\x1c\x0b\x96\xfd?\xc2\x9a\xde%\xd7[\xad\xcb~\x95\xd9}\x9b\xe1\xf7\xf7\x87\xfd\xf4\xf4y?\x0f\xd3\x90A\xc7\xbbP\x1c\xcb\xb1\xc0\xc9\xabjr\xf1$\xee\x7f\x1a\xa7\x99\xa7l\x1c\xb9?\x8dzO\xf6\x8f\x81\xad\xb9H\x03\xff\x00\xc0s\xfc\xe9\xa7\xc6\xfam\xa2\xec\xd3m6\xfeJ?!E\x86\xa5\xd9\x1c\x85\xa7\x86\xb5\xbb\xcf\xf5V\xec\x07\xab|\xa3\xf5\xae\x96\xdb\xe1\xfd\xd3\x0c\xdeL\xb1\x8f\xf6F\x7f\xc2\xb3\xae\xfco\xad\\q\tXG\xfb#\xfck\x9a\xb9\xd4/\xaf\x0en\xa5i>\xa6\x8d\x07i\x1f\xff\xd5\xc0\x93\xc7\xf7X\xdbon\xa8*\x9bx\xefY?t \xfc+I<\x00\x10n\xbb\xbb\x0b\xf4_\xfe\xbdN<\x1b\xa0\'\x13^\xff\x00\xe3\xca+\xf4\xadO\xe6_p\xc2\xff\x00\x84\xe7]\xf5\x8f\xfe\xf9\xa7\x0f\x1dkc\xae\xcf\xfb\xe6\xb7\x7f\xe1\x12\xf0\xaf\xfc\xfe\x9f\xfb\xf8\x9f\xe1H|!\xe1\xb6\xff\x00Wz\x7f\xef\xb5\xff\x00\n,\x17\x87c6/\x1f\xea+\xfe\xb6$o\xd2\xae\xa7\x8dt\xcb\x91\xb6\xfe\xd3\xaf\\`\xd0|\x07i/\x16\xb7\x83\xf2\x07\xf9\x1a\xce\xb8\xf0\x16\xab\x1f0:H?#KP\xf7\rO+\xc1\x1a\xaf\xdca\x03\x1f\xf8\rC7\x80\xd2Q\xbfN\xb9V\x1d\xb3\xff\x00\xd6\xae>\xebA\xd5\xec\xbf\xd7\xc0\xd8\xf6\x19\x1f\xa5P\x8a\xe2\xea\xd1\xb3\x03\xb4d\x7ft\xe2\x82\xb9\x7f\x95\x9d,\xde\n\xd7b\xfb\x88\xae=\x88\xac\xf7\xf0\xd6\xb8\x9dm\x9f\xf0\x19\xa9!\xf1V\xbd\x07\tpH\xf7\x00\xff\x00J\xd1\x8f\xc7:\xda\x0f\x9b\xcbo\xaa\xff\x00\x85\x1a\x0f\xde1?\xb05\xbf\xf9\xf4\x97\xfe\xf94\xe1\xe1\xedl\xf1\xf6Y?\xef\x9a\xe8\x7f\xe1?\xd5\xff\x00\xe7\x94?\x91\xff\x00\x1acx\xfbY=\x12!\xf4\x07\xfch\xd0/.\xc6d~\x12\xd7\xa58\x10\x11\xf5\xc0\xad[\x7f\x01j\x8f\xcd\xc3\xa4c\xf3\xfeUFO\x19\xeb\xf2\x0c,\x81>\x8a+"}kV\xb9\xe2k\x87#\xd0\x1c\x0f\xc8Q\xa0\xbd\xe3\xb8\x1e\x16\xf0\xf6\x9a7j\x97Y>\x99\x02\x9c5\xdf\x08\xe9\xbcY[\xf9\x84w\x0b\xfe5\xe70\xdb]]7\xeeQ\x9c\xfb\x0c\xd7Ak\xe0\xedr\xe7\x04\xc6#\x1f\xed\x9c\x7f*=\x05\xca\xbe\xd3?\xff\xd6\xf2f\xb8\xb9\x94\xfc\xee\xcd\xf8\xd3|\xb9\x9b\xf8I\xfc+\xd2O\x8a\xfc3k\xf2\xd9\xd9\xe7\x1f\xec\xa8\xa8\xcf\x8fm\xd3\x88,\xc6>\xa0\x7fJ\xfd&\xc8\xfeg\xbb\xe8\x8f:\xf2&\xfe\xe1\xfc\xa8\xf2f\x1f\xc0\x7f*\xf4_\xf8X\x8d\xff\x00>\x83\xfe\xfb\xff\x00\xech\x1f\x10\x11\xbf\xd6Y\x8f\xfb\xeb\xff\x00\xadE\x90^]\x8f:\x0f2t$U\xfb}oU\xb5\xc7\x91;\x8cv\xcdw#\xc6Z\x14\xbc\\\xd9q\xfe\xea\x9f\xf0\xa5\x17^\x04\xd48\x92?$\x9fb\xbf\xcb\x8a,\x17\xee\x8c{O\x1c\xea\xb0\xe1nUe_\xa6+Y|Q\xe1\xcb\xfe5+]\xbe\xf8\xcd\r\xe0\xdd\x1a\xf8n\xd2n\xff\x00\x0c\x86\xfeX\xacK\xaf\x03\xebp\x1f\xdc\x85\x94\x7f\xb2q\xfc\xf1OR}\xc3tYx\x1a\xf3\xe6I\x04g\xd38\xfd(\x1e\x12\xf0\xf4\xff\x00\xea.\xff\x00"+\x84\x9bE\xd5\xad\xce%\xb6\x90c\xd1r?J\xa2\xd0M\x1f\xdfB\xbfQ\x8aE(\xf6g\xa5\xff\x00\xc2\r\xa5\x1e\x97g\xf4\xa4\xff\x00\x84\'GO\xbfvp>\x95\xe6\x14\xa1I\xe8(\xd0|\xaf\xb9\xe9\xbf\xf0\x8f\xf8F\xdb\x9b\x8b\x9c\xff\x00\xc0\xb1H.\xfc\x0f\xa7\xff\x00\xaa\x8f\xcd#\xa7\x19\xaf<\x8e\xc6\xf6^"\x85\xdb\xe8\xa6\xb5m\xfc/\xae\xdc\xfd\xcbr\xa3\xfd\xac/\xf3\xa0\x9eU\xd5\x9d<\xfe:\x8e!\xb3M\xb6\t\xee\x7f\xfa\xd5\xcf\\\xf8\xb7\\\xb9?\xebv\x0fD\xe2\xb7-|\x03s\x8d\xf7\xf3\xa4c\xfd\x9e\x7f\xc2\xae\x8d\'\xc1Zo\x17s\xf9\xa4{\xe7\xff\x00A\xa3P\xf7V\xc7\xff\xd9
--7ac9dc7b70e1c10c8b48844f6dd76995--

The request being made is below. Debugger paused at: https://github.com/kevin1024/vcrpy/blob/master/vcr/stubs/__init__.py#L257

>>> __file__
'{{ ENVIRONMENT PATH REDACTED }}/lib/python3.10/site-packages/vcr/stubs/__init__.py'
>>> print(json.dumps(self._vcr_request._to_dict(), default=str, indent=2))
{
  "method": "POST",
  "uri": "https://{{ HOST REDACTED }}{{ PATH REDACTED }}?page=0",
  "body": "b'{{ SEE ABOVE }}'",
  "headers": {
        "User-Agent": [
          "{{ REDACTED }}"
    ],
    "Accept-Encoding": [
          "gzip, deflate, br"
    ],
    "Accept": [
          "*/*"
    ],
    "Connection": [
          "keep-alive"
    ],
    "Content-Length": [
          "4836"
    ],
    "Content-Type": [
          "multipart/form-data; boundary=7ac9dc7b70e1c10c8b48844f6dd76995"
    ],
    "Authorization": [
          "Bearer {{ REDACTED }}"
    ]
  }
}

I'm also on the latest version:

sammorgan$ python -c "import vcr; print(vcr.__version__)"
5.1.0