QT GET Request Response отличается от того, который вы получаете от обычного браузера - PullRequest
1 голос
/ 23 марта 2012

Я пытаюсь запустить мультизапрос с использованием фреймворка QT. Мой запрос выглядит так

{"query1":"SELECT uid2 FROM friend WHERE uid1=me()","query2":"SELECT uid, name FROM user WHERE uid in(SELECT uid2 FROM #query1)"}

До сих пор я обнаружил, что если не использовать метод "# query1", он будет работать. Но мне это нужно в моем приложении, поскольку мой фактический запрос более сложный.

Если я вставлю

https://api.facebook.com/method/fql.multiquery?format=json&queries=%7B%22query1%22%3A%22SELECT%20uid2%20FROM%20friend%20WHERE%20uid1%3Dme%28%29%22%2C%22query2%22%3A%22SELECT%20uid%2C%20name%20FROM%20user%20WHERE%20uid%20in%28SELECT%20uid2%20FROM%20%23query1%29%22%7D&access_token=xxxxxxxxxxxxx

в адресной строке браузера, где access_token является действительным, я получаю ответ.

Когда я делаю тот же запрос от QT, я получаю пустой список json ("[]")

Вот код QT:

//this is just a markup, the read deal works

QNetworkAccessManager *manager = new QNetworkAccessManager(this);
QNetworkRequest request;

url="https://api.facebook.com/method/fql.multiquery?format=json&queries=%7B%22query1%22%3A%22SELECT%20uid2%20FROM%20friend%20WHERE%20uid1%3Dme%28%29%22%2C%22query2%22%3A%22SELECT%20uid%2C%20name%20FROM%20user%20WHERE%20uid%20in%28SELECT%20uid2%20FROM%20%23query1%29%22%7D&access_token=xxxxxxxxxxxxx";

request.setRawHeader("Content-Type","application/x-www-form-urlencoded");

request.setUrl(url);

reply=manager->get(request);
connect(manager, SIGNAL(finished(QNetworkReply*)),
             this, SLOT(replyFinished(QNetworkReply*)));


void replyFinished(QNetworkReply *r){

qDebug()<<r->readAll();

}

В настоящее время выводится «[]». Если я использую простой URL-адрес, такой как

http://graph.facebook.com/me/friends?access_token=xxxxxxxxx

работает просто отлично.

  • Так чего мне не хватает?

  • Это потому, что есть разница между запросом get моего браузера и мой QT получить запрос?

  • Нужно ли настраивать заголовок моего HTTP-запроса на получение? И что
    значения если так?

Заранее спасибо

1 Ответ

0 голосов
/ 24 марта 2012

URL-адрес уже закодирован, вы должны использовать QUrl::setEncodedUrl() для его установки или позволить QUrl кодировать его для вас:

url = "https://api.facebook.com/method/fql.multiquery?format=json&queries={\"query1\":\"SELECT uid2 FROM friend WHERE uid1=me()\",\"query2\":\"SELECT uid, name FROM user WHERE uid in(SELECT uid2 FROM #query1)\"}&access_token=xxxxxxxxxxxxx";  
...