7

I'm playing with the Python library httplib2. The following is my code.

import urllib.parse
import httplib2

httplib2.debuglevel = 1

http = httplib2.Http()

url = "http://login.sina.com.cn/hd/signin.php"
body = {"act": "1",
        "entry": "vblog",
        "password": "P@$sW0rd",
        "reference": "http://vupload.you.video.sina.com.cn/u.php?m=1&cate=0",
        "reg_entry": "vblog",
        "remLoginName": "on",
        "username": "this_is_user_name",
        "x": "",
        "y": ""}

headers = {"Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
           "Accept-Charset", "ISO-8859-1,utf-8;q=0.7,*;q=0.7",
           "Accept-Encoding", "gzip,deflate",
           "Accept-Language", "en-us,en;q=0.5",
           "Connection", "keep-alive",
           "Content-Length", "181",
           "Content-Type", "application/x-www-form-urlencoded",
           "Host", "login.sina.com.cn",
           "Keep-Alive", "115",
           "Referer", "http://login.sina.com.cn/hd/signin.php?entry=vblog&r=http%3A%2F%2Fvupload.you.video.sina.com.cn%2Fu.php%3Fm%3D1%26cate%3D0",
           "User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.16) Gecko/20110319 Firefox/3.6.16"}

response, content = http.request(url, 'POST', headers=headers, body=urllib.parse.urlencode(body))

When I execute it, I get the error:

Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.

C:\>python --version
Python 3.2

C:\>python a.py
Traceback (most recent call last):
  File "a.py", line 32, in <module>
    response, content = http.request(url, 'POST', urllib.parse.urlencode(body), headers=headers)
  File "C:\Python32\lib\site-packages\httplib2\__init__.py", line 961, in request
    headers = _normalize_headers(headers)
  File "C:\Python32\lib\site-packages\httplib2\__init__.py", line 184, in _normalize_headers
    return dict([ (key.lower(), NORMALIZE_SPACE.sub(value, ' ').strip())  for (key, value) in headers.items()])
AttributeError: 'set' object has no attribute 'items'

C:\>

I'm pretty new to Python and httplib2, anything wrong in my code?

3
  • 2
    I wish everybody would provide the full traceback of their errors -- it would save so much time! Commented Apr 1, 2011 at 11:59
  • Hi Sven, how to get the full traceback? I'm new to Python and not sure whether the trace I provided is the full traceback. Commented Apr 1, 2011 at 14:08
  • You did provide the full traceback, but most people don't. Commented Apr 1, 2011 at 14:17

1 Answer 1

21

headers should be a dictionary, not a set:

headers = {"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
           ...}

Note the colon instead of the comma.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.