Search code examples
pythonceleryurllib2pyramidurlopen

TypeError: urlopen() got an unexpected keyword argument 'headers'


I'm using rest api to send push notifications. Docs are here. I'm using pyramid and scheduling these push notifications using celery.

This is my code sample:

result = urllib2.urlopen(urlRequest, headers={
      "X-Parse-Application-Id": settings["parse.application.id"],
      "X-Parse-REST-API-Key": settings["parse.restapi.key"],
      "Content-Type": "application/json"
     })

connection = httplib.HTTPSConnection('api.parse.com', 443)
connection.connect()

connection.request('POST', '/1/push', json.dumps(data), )
result = json.loads(connection.getresponse().read())

But celery logs this error:

2015-08-18 16:39:45,092 INFO  [celery.worker.strategy][MainThread] Received task: app_v1_1.tasks.push_notification[877906d8-1ea7-4b1f-8a54-aa61bffb40e8]
2015-08-18 16:39:45,094 ERROR [celery.worker.job][MainThread] Task app_v1_1.tasks.push_notification[877906d8-1ea7-4b1f-8a54-aa61bffb40e8] raised unexpected: TypeError("urlopen() got an unexpected keyword argument 'headers'",)
Traceback (most recent call last):
  File "/home/apnistreet/work/ve/local/lib/python2.7/site-packages/celery/app/trace.py", line 240, in trace_task
    R = retval = fun(*args, **kwargs)
  File "/home/comp/work/ve/local/lib/python2.7/site-packages/celery/app/trace.py", line 438, in __protected_call__
    return self.run(*args, **kwargs)
  File "/home/comp/work/site/code/apnistreet_v1_1/tasks.py", line 168, in push_notification
    # "Content-Type": "application/json"
TypeError: urlopen() got an unexpected keyword argument 'headers'

What is the problem?


Solution

  • urllib2.urlopen has no argument named headers:

    urllib2.urlopen: (url, data=None, timeout=socket._GLOBAL_DEFAULT_TIMEOUT)

    Open the URL url, which can be either a string or a Request object.

    Use urllib2.Request to pass headers:

    req = urllib2.Request(url, headers={
          "X-Parse-Application-Id": settings["parse.application.id"],
          "X-Parse-REST-API-Key": settings["parse.restapi.key"],
          "Content-Type": "application/json"
         })
    result = urllib2.urlopen(req)