Content-Length should be specified for iterable data of type <class 'dict'>

£可爱£侵袭症+ 提交于 2020-01-06 12:48:13

问题


import urllib.request
url = 'site'
headers = {'Authorization' : 'Basic emVkMHg6WWJyYm5mMDA='}
req = urllib.request.Request(url, headers)
response = urllib.request.urlopen(req).getcode()

I wanted to write multi-threaded authorization on a remote server, but I see this:

Traceback (most recent call last):
  File "C:\Program Files\Python33\lib\urllib\request.py", line 1186, in do_request_
    mv = memoryview(data)
TypeError: memoryview: dict object does not have the buffer interface

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:/Users/zed/Desktop/sddf.py", line 6, in <module>
    response = urllib.request.urlopen(req).getcode()
  File "C:\Program Files\Python33\lib\urllib\request.py", line 156, in urlopen
    return opener.open(url, data, timeout)
  File "C:\Program Files\Python33\lib\urllib\request.py", line 467, in open
    req = meth(req)
  File "C:\Program Files\Python33\lib\urllib\request.py", line 1191, in do_request_
    data))
ValueError: Content-Length should be specified for iterable data of type <class 'dict'> {'Authorization': 'Basic emVkMHg6WWJyyM5mMDA='}

回答1:


Your problem:

class Request:

    def __init__(self, url, data=None, headers={},
                 origin_req_host=None, unverifiable=False,
                 method=None):

You should do

req = urllib.request.Request(url, headers = headers)


来源:https://stackoverflow.com/questions/22403871/content-length-should-be-specified-for-iterable-data-of-type-class-dict

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!