Ошибка Android c2dm 302 Http - PullRequest
       0

Ошибка Android c2dm 302 Http

0 голосов
/ 29 декабря 2011

каждый раз, когда я хочу отправить push-уведомление в свою ячейку, я получаю 302 Moved Error от серверов Google. Он говорит, что он переехал на www.google.com Это не кажется правильным. Итак, у меня есть следующая информация:

  • Я сижу за прокси, но я попробовал это также без прокси. Без эффекта.
  • Метод командной строки CUrl отлично работает
  • Получение токена авторизации с серверов Google работает нормально
  • Изменение токена аутентификации, который я хочу отправить, не имеет никакого реального эффекта (изменение последних 3-4 символов)
  • Отправка без идентификатора регистрации не имеет никакого эффекта

Вот код, который отправляет push-уведомление:

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>

Что я делаю не так?

Редактировать: На самом деле решение было довольно простым: у меня был пробел в конце идентификатора аутентификации. Это на самом деле привело к ошибке. Так что для всех, кто читает это в далеком будущем: ПРОВЕРЬТЕ КОД АУТЕНТИФИКАЦИИ!

1 Ответ

2 голосов
/ 03 января 2012

Я столкнулся с подобной проблемой. Работает из cURL, но не из Qt. Однако мне пришлось использовать флаг -k с cURL, иначе игнорировать ошибки ssl. После того, как я выполнил простую ignoreSslErrors () в QNetworkReply *, он отлично работал для меня, это может помочь и вам. Теперь у меня есть этот код для вызова 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();

Это прекрасно работает для меня.

...