То, что urllib использует для определения Content-Length, кажется, запутано json, так что вы должны рассчитать это сами.
import json
import urllib2
data = json.dumps([1, 2, 3])
clen = len(data)
req = urllib2.Request(url, data, {'Content-Type': 'application/json', 'Content-Length': clen})
f = urllib2.urlopen(req)
response = f.read()
f.close()
У меня ушло навсегда, чтобы понять это, поэтому я надеюсь, что это поможет кому-то еще.