Android c2dm 302 Http 错误
Posted
技术标签:
【中文标题】Android c2dm 302 Http 错误【英文标题】:Android c2dm 302 Http error 【发布时间】:2011-12-29 15:36:43 【问题描述】:每次我想向我的手机发送推送通知时,我都会从 Google 服务器收到 302 Moved Error。它说,它搬到了 www.google.com。这似乎不正确。所以我有以下信息:
我坐在代理后面,但我在没有代理的情况下也试过了。没有效果。 CUrl 命令行方法工作正常 从 Google 服务器接收身份验证令牌工作正常 更改我要发送的身份验证令牌没有实际效果(更改最后 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>
我做错了什么?
编辑:解决方案实际上非常简单:我的身份验证 ID 末尾有一个空格。这实际上导致了错误代码。因此,对于在遥远的将来阅读此内容的每个人:检查您的身份验证码!
【问题讨论】:
Moved Temporary...这可能意味着Google有维护。 这似乎不合法。它在命令行上与 CUrl 一起工作得很好。所以我认为谷歌服务器很好。 【参考方案1】:我遇到了类似的问题。从 cURL 工作,但不是从 Qt 工作。然而,我不得不将 -k 标志与 cURL aka 忽略 ssl 错误一起使用。在我对 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();
这对我来说很好用。
【讨论】:
以上是关于Android c2dm 302 Http 错误的主要内容,如果未能解决你的问题,请参考以下文章