Skip to content

TypeError: object supporting the buffer API required with multipart requests #10

Open
@Envek

Description

@Envek

First of all, thank you very much for this plugin! It works awesome, but not in the following use case:

When I'm trying to make a multipart/form-data request with http --multipart and AWS Auth, like this:

http --auth-type aws4 --auth REDACTED.execute-api.us-west-2.amazonaws.com \
     --multipart POST http://redacted.dpmain.tld/endpoint field=value file@/path/to/file

I'm getting following error:

http: error: TypeError: object supporting the buffer API required

Also this error is thrown when files are included in x-www-urlencoded requests with http --form url file@/path/to/file (in case of multipart requests it fails with any fields)

http --debug output with versions and traceback is here
HTTPie 2.3.0
Requests 2.25.1
Pygments 2.7.4
Python 3.8.2 (default, Oct 22 2020, 20:12:25) 
[GCC 5.5.0]
/home/envek/.asdf/installs/python/3.8.2/bin/python3.8
Linux 5.4.0-64-generic

<Environment {'colors': 256,
 'config': {'default_options': []},
 'config_dir': PosixPath('/home/envek/.config/httpie'),
 'devnull': <property object at 0x7f7e9cce4130>,
 'is_windows': False,
 'log_error': <function Environment.log_error at 0x7f7e9cce2820>,
 'program_name': 'http',
 'stderr': <_io.TextIOWrapper name='<stderr>' mode='w' encoding='utf-8'>,
 'stderr_isatty': True,
 'stdin': <_io.TextIOWrapper name='<stdin>' mode='r' encoding='utf-8'>,
 'stdin_encoding': 'utf-8',
 'stdin_isatty': True,
 'stdout': <_io.TextIOWrapper name='<stdout>' mode='w' encoding='utf-8'>,
 'stdout_encoding': 'utf-8',
 'stdout_isatty': True}>

>>> requests.request(**{'auth': <httpie_aws_authv4.AWSAuth object at 0x7f7e9e7e52b0>,
 'data': <MultipartEncoder: <generator object MultiValueOrderedDict.items at 0x7f7e9c69c970>>,
 'headers': {'User-Agent': b'HTTPie/2.3.0', 'Content-Type': 'multipart/form-data; boundary=cb266ae3fb8a4cf89c8c9c8a40ba7f85'},
 'method': 'post',
 'params': <generator object MultiValueOrderedDict.items at 0x7f7e9c69c9e0>,
 'url': 'http://localhost:8080/fileAttachments'})


http: error: TypeError: object supporting the buffer API required

Traceback (most recent call last):
  File "/home/envek/.asdf/installs/python/3.8.2/bin/http", line 8, in <module>
    sys.exit(main())
  File "/home/envek/.asdf/installs/python/3.8.2/lib/python3.8/site-packages/httpie/__main__.py", line 11, in main
    exit_status = main()
  File "/home/envek/.asdf/installs/python/3.8.2/lib/python3.8/site-packages/httpie/core.py", line 79, in main
    exit_status = program(
  File "/home/envek/.asdf/installs/python/3.8.2/lib/python3.8/site-packages/httpie/core.py", line 196, in program
    for message in messages:
  File "/home/envek/.asdf/installs/python/3.8.2/lib/python3.8/site-packages/httpie/client.py", line 80, in collect_messages
    prepared_request = requests_session.prepare_request(request)
  File "/home/envek/.asdf/installs/python/3.8.2/lib/python3.8/site-packages/requests/sessions.py", line 456, in prepare_request
    p.prepare(
  File "/home/envek/.asdf/installs/python/3.8.2/lib/python3.8/site-packages/requests/models.py", line 320, in prepare
    self.prepare_auth(auth, url)
  File "/home/envek/.asdf/installs/python/3.8.2/lib/python3.8/site-packages/requests/models.py", line 551, in prepare_auth
    r = auth(self)
  File "/home/envek/.asdf/installs/python/3.8.2/lib/python3.8/site-packages/httpie_aws_authv4.py", line 60, in __call__
    return aws_request.__call__(r)
  File "/home/envek/.asdf/installs/python/3.8.2/lib/python3.8/site-packages/aws_requests_auth/aws_auth.py", line 76, in __call__
    aws_headers = self.get_aws_request_headers_handler(r)
  File "/home/envek/.asdf/installs/python/3.8.2/lib/python3.8/site-packages/aws_requests_auth/aws_auth.py", line 88, in get_aws_request_headers_handler
    return self.get_aws_request_headers(r=r,
  File "/home/envek/.asdf/installs/python/3.8.2/lib/python3.8/site-packages/aws_requests_auth/aws_auth.py", line 146, in get_aws_request_headers
    payload_hash = hashlib.sha256(body).hexdigest()
TypeError: object supporting the buffer API required

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions