Android c2dm 302 Http错误
每次我想向我的手机发送推送通知时,我都会从谷歌服务器收到302 Moved错误。它说,它移动到了www.google.com。这似乎不正确。因此,我有以下信息:Android c2dm 302 Http错误,android,c++,qt,http,android-c2dm,Android,C++,Qt,Http,Android C2dm,每次我想向我的手机发送推送通知时,我都会从谷歌服务器收到302 Moved错误。它说,它移动到了www.google.com。这似乎不正确。因此,我有以下信息: 我坐在一个代理的后面,但我也在没有代理的情况下尝试了这个。没有效果 CUrl命令行方法工作良好 从Google服务器接收auth令牌可以正常工作 更改要发送的身份验证令牌没有实际效果(更改最后3-4个字符) 不发送注册id无效 以下是发送推送通知的代码: QString headerStr = QString("GoogleLogi
- 我坐在一个代理的后面,但我也在没有代理的情况下尝试了这个。没有效果
- CUrl命令行方法工作良好
- 从Google服务器接收auth令牌可以正常工作
- 更改要发送的身份验证令牌没有实际效果(更改最后3-4个字符)
- 不发送注册id无效
QString headerStr = QString("GoogleLogin auth=") + m_authCode;
qDebug(qPrintable(headerStr));
QUrl url;
url.addQueryItem("registration_id", m_pRegCode->text());
url.addQueryItem("collapse_key", "0");
url.addQueryItem("data.message", "data");
qDebug("%s", qPrintable(url.toString()));
qDebug("%s", qPrintable(QString(url.encodedQuery())));
QByteArray data;
data = url.encodedQuery();
QUrl header("https://android.apis.google.com/c2dm/send");
QNetworkRequest req(header);
req.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded;charset=UTF-8");
req.setHeader(QNetworkRequest::ContentLengthHeader, data.length());
req.setRawHeader(QByteArray("Authorization"), headerStr.toAscii());
qDebug("%s", qPrintable(req.url().toString()));
m_pPushRep = m_pManager->post(req, data);
我得到的答案是:
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>302 Moved</TITLE></HEAD><BODY>
<H1>302 Moved</H1>
The document has moved
<A HREF="http://www.google.com">here</A>.
</BODY></HTML>
302移动
302移动
文档已移动
.
我做错了什么
编辑:解决方案其实很简单:我的身份验证id末尾有一个空格。这实际上导致了错误代码。因此,对于在遥远的将来阅读本文的每个人来说:检查您的身份验证代码 我遇到了类似的问题。从cURL开始工作,但不是从Qt开始。然而,我不得不在忽略ssl错误时使用-k标志。在我对QNetworkReply*做了一个简单的ignoreSslErrors()之后,它对我来说效果很好,这可能对你也有好处。我现在有了执行api调用的代码
QNetworkRequest request(QUrl("https://android.apis.google.com/c2dm/send"));
QUrl postData;
postData.addQueryItem("collapse_key","1");
postData.addQueryItem("registration_id",id);
postData.addQueryItem("data.message",message);
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded;charset=UTF-8");
request.setHeader(QNetworkRequest::ContentLengthHeader, postData.encodedQuery().length());
request.setRawHeader("Authorization","GoogleLogin auth=....");
network->post(request,postData.encodedQuery())->ignoreSslErrors();
这对我来说很好。暂时搬家。。。这可能意味着谷歌有维护。这似乎不合法。它可以在命令行上与CUrl一起工作。所以我假设谷歌服务器是好的。