Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/189.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android c2dm 302 Http错误_Android_C++_Qt_Http_Android C2dm - Fatal编程技术网

Android c2dm 302 Http错误

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

每次我想向我的手机发送推送通知时,我都会从谷歌服务器收到302 Moved错误。它说,它移动到了www.google.com。这似乎不正确。因此,我有以下信息:

  • 我坐在一个代理的后面,但我也在没有代理的情况下尝试了这个。没有效果
  • 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一起工作。所以我假设谷歌服务器是好的。