【问题标题】:Google Cloud Messaging HTTP Error 400: Bad RequestGoogle Cloud Messaging HTTP 错误 400:错误请求
【发布时间】:2012-07-26 16:19:57
【问题描述】:

我正在尝试通过 GCM(Google 云消息传递)发送消息。我已经通过 Google API 注册,我可以从多个 Android 测试手机向我的网站(这是一个 Google App Engine 后端)发送一个 regID。 但是,我无法从 Google App Engine 向 GCM 发送任何内容。这是我正在尝试使用的。

    regId = "APA91b..."

    json_data = {"collapse_key" : "Food-Promo", "data" : {
                    "Category" : "FOOD",
                    "Type": "VEG",
               }, "registration_ids": [regId],
    }


    url = 'https://android.googleapis.com/gcm/send'




    apiKey = "AI..."
    myKey = "key=" + apiKey

    headers = {'Content-Type': 'application/json', 'Authorization': myKey}
    data = urllib.urlencode(json_data)
    data2 = {"title": title}
    data3 = urllib.urlencode(data2)

    req = urllib2.Request(url, data, headers)


    f = urllib2.urlopen(req)
    response = f.read()
    f.close()

    logging.debug("***!!!!!!!WriteEntry TEST -----  Response: " + response)

这是我收到的错误。

Traceback (most recent call last):
  File "/base/python_runtime/python_lib/versions/1/google/appengine/ext/webapp/_webapp25.py", line 703, in __call__
    handler.post(*groups)
  File "/base/data/home/apps/s~journaltestza/26.360625174851783344/main.py", line 213, in post
    f = urllib2.urlopen(req)
  File "/base/python_runtime/python_dist/lib/python2.5/urllib2.py", line 124, in urlopen
    return _opener.open(url, data)
  File "/base/python_runtime/python_dist/lib/python2.5/urllib2.py", line 387, in open
    response = meth(req, response)
  File "/base/python_runtime/python_dist/lib/python2.5/urllib2.py", line 498, in http_response
    'http', request, response, code, msg, hdrs)
  File "/base/python_runtime/python_dist/lib/python2.5/urllib2.py", line 425, in error
    return self._call_chain(*args)
  File "/base/python_runtime/python_dist/lib/python2.5/urllib2.py", line 360, in _call_chain
    result = func(*args)
  File "/base/python_runtime/python_dist/lib/python2.5/urllib2.py", line 506, in http_error_default
    raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
HTTPError: HTTP Error 400: Bad Request

谢谢!

【问题讨论】:

    标签: python google-cloud-messaging


    【解决方案1】:

    data2 和 data3 是做什么用的?您发布的数据不是正确的 json,因此您需要使用 json.dumps(data)。代码应该是这样的:

    json_data = {"collapse_key" : "Food-Promo", "data" : {
                    "Category" : "FOOD",
                    "Type": "VEG",
               }, "registration_ids": [regId],
    }
    
    
    url = 'https://android.googleapis.com/gcm/send'
    apiKey = "AI..."
    myKey = "key=" + apiKey
    data = json.dumps(json_data)
    headers = {'Content-Type': 'application/json', 'Authorization': myKey}
    req = urllib2.Request(url, data, headers)
    f = urllib2.urlopen(req)
    response = json.loads(f.read())
    reply = {}
    if response ['failure'] == 0:
        reply['error'] = '0'
    else:
        response ['error'] = '1'
    return HttpResponse(json.dumps(reply), mimetype="application/javascript")
    

    【讨论】:

      【解决方案2】:

      尝试使用python-gcm。它也可以处理错误。

      【讨论】:

        【解决方案3】:

        这是我最终解决它的方法,但上述方法也有效。

        def sendGCM(self, regid, email, entry_id, date_modified, kind):
        
        
            url = 'https://android.googleapis.com/gcm/send'
            apiKey = _MY_API_KEY
            myKey = "key=" + apiKey
        
            json_data = { "registration_id": regid, "data" : {
                "entry_id" : entry_id,
                "email": email,
                "date_modified": date_modified,
                "kind": kind,
                "reg_id": regid,
                },
            }
        
           ### Get regids
            registration_data = {
                "registration_ids": [regid],
            }
        
            headers = {'Content-Type': 'application/json', 'Authorization': myKey}
            data = urllib.urlencode(json_data)               
            req = urllib2.Request(url, data)
            req.add_header("Authorization", myKey)               
        
            f = urllib2.urlopen(req)
            response = f.read()
            f.close()
        

        【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-11-18
        • 1970-01-01
        • 2012-02-09
        相关资源
        最近更新 更多