Russian Qt Forum

Qt => Работа с сетью => Тема начата: v1pka от Декабрь 23, 2011, 22:41



Название: Задание headera или обман гугла.
Отправлено: v1pka от Декабрь 23, 2011, 22:41
Здравствуйте. Есть опенсурсная программа для просмотра гуглокарт http://qgmview.sourceforge.net/ (http://qgmview.sourceforge.net/). Но она несколько устарела и карты больше не отображаются, т.к. Гугл ругается на Get - запрос и отвечает Sorry (до недавнего момента работало, но пару дней назад перестало -> забанили?).
В классе downloader есть метод:

Код:
void Downloader::nextRequest(){
    printf("next request\n");
    while (!requests.empty()){
        Request& cur = requests.head();
        file.setFileName(cur.filename);
        QUrl url(cur.url);
        http->setHost(url.host());
        
    
        if (!file.open(QIODevice::WriteOnly)){
            printf("couldn't open file %s\n", (const char*)(cur.filename.toAscii()));
            //cur.callback->execute(false);
            requests.dequeue();
            continue;
        }
        
        http->request(header);
        printf("file to retrieve: %s\n", (const char*)(cur.url.toAscii()));
        lastRequestId = http->get(cur.url, &file);
        break;
    }
    
    if (requests.empty())
        emit downloadsFinished();
}

Есть идея прописать вот это:
Код:
       
        QHttpRequestHeader header("GET", QUrl::toPercentEncoding(cur.url));
        header.setValue("Accept", "text/html, application/xhtml+xml, */*\n");
        header.setValue("Accept-Language", "ru-RU\n");
        header.setValue("User-Agent", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; Creative AutoUpdate v1.41.05)\n");
        header.setValue("Accept-Encoding", "gzip, deflate\n");
        header.setValue("Host", "mt0.google.com\n");
        header.setValue("Connection", "Keep-Alive\n");
        http->setHost(url.host());
        http->request(header);        
 
Но как заменить последнюю строчку в оригинальном коде
Код:
lastRequestId = http->get(cur.url, &file);
? Чтобы результат передавался файлу. Или какие-нибудь другие идеи о том, как обмануть гугл?

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