Ionic Push Bad Request 400

时间:2015-05-27 03:04:49

标签: python post curl push-notification ionic

编辑:

所以看起来问题是我看到的输出所有内容都是单引号,而不是双引号,还有一个" u"被抛出的角色。有没有人知道可能导致这种情况的原因?如果我尝试通过将所有内容更改为双引号以及删除" u"来尝试验证JSON。然后它会正确验证。

编辑:2 事实证明问题是使用urlencode,一旦我改为使用json.dumps(),一切都运行得很好。

我正在努力将Ionic Push应用到我的Ionic应用程序中,并且无法为" Push"创建格式正确的请求。您需要点击以实际发送推送通知的服务。

我正在进行python实现,并遵循他们在documentation中设置它的方式。

因此,在下面的代码中,您可以看到我正在注销Logger.info(post_data),如果我完全从那里注销了并执行手动卷曲请求,我就能够接收到设备的推送通知正确。

但是,当我尝试向服务发送POST请求以发送消息时,我收到了400 BAD REQUEST响应,因此它让我相信我必须丢失标题中的内容/认证?我使用urllib2的实现似乎与设置中显示的内容相匹配,但我仍然遇到问题。任何帮助将不胜感激。

这是Logger.info(post_data)的记录输出,您还可以找到以下代码:

# Output
{'notification': {'alert': u"Automatic Investments is disabled! We aren't buying you Bitcoin!"}, 'tokens': [u'APA91bGyHR56ANGhiDvlgY7DM7fda2EG4Hp8hSw2arJmaib-BXHT8YWLw5xMloUgZSQvOdzD3Qpg6FMTZeS8b9c2Tl0Rd86qbDa2h_HJKY-pOMP95uNdbUSjJJMuvd-TOs-rhh8gaj6Hs9G0q2LsG7Bc0HtII-O3cQ']}


# Code
class PushService(object):

    def __init__(self, app=None):
        self.app = app
        if app is not None:
            self.init_app(app)

    def init_app(self, app):
        self.url = app.config['IONIC_PUSH_ENDPOINT']
        self.app_id = app.config['IONIC_PUSH_APP_ID']
        self.api_key = app.config['IONIC_PUSH_API_KEY']
        self.secret_api_key = app.config['IONIC_PUSH_PRIVATE_KEY']

        Logger.info('URL: ' + str(self.url))
        Logger.info('APP_ID: ' + str(self.app_id))
        Logger.info('API_KEY: ' + str(self.api_key))
        Logger.info('SECRET_KEY: ' + str(self.secret_api_key))

    def send(self, user, device, message):

        Logger.info('DEVICE_ID: ' + device.device_id)

        tokens = [device.device_id]

        # Set up the data of POST for the push
        post_data = {"tokens": tokens,
                     "notification": {
                         "alert": message
                         }
                     }

        # Encode for passing to urllib
        data = urllib.urlencode(post_data)

        Logger.info(post_data)

        Logger.info('RIGHT BEFORE ATTEMPTING TO SEND')

         app_id = self.app_id
         app_key = self.secret_api_key
         url = self.url
         req = urllib2.Request(url, data=data)
         req.add_header("Content-Type", "application/json")
         req.add_header("X-Ionic-Application-Id", app_id)
         b64 = base64.encodestring('%s:%s' % (app_key, '')).replace('\n', '')
         req.add_header("Authorization", "Basic %s" % b64)
         resp = urllib2.urlopen(req)

         print resp

1 个答案:

答案 0 :(得分:1)

如果其他人遇到同样的问题,请确保您没有使用urllib.urlencode(post_data),请改用json.dumps(post_data),上面的代码也可以使用。