Russian Qt Forum
Ноябрь 24, 2024, 03:38 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Yandex не отвечает  (Прочитано 33694 раз)
vbi
Гость
« : Август 17, 2011, 11:25 »

Написал програмку, которая посылает GET запрос на "www.yandex.ru", который по идее должен возвратить содержание страницы, но вместо этого возвращает пустую строку.
Если послать get запрос на "yandex.ru", то яндекс возвращает страницу "302 Moved Permanently" и перенаправляет на "www.yandex.ru", а тот в свою очередь возвращает пустую строку.
Как с ним бороться, может какие-то уникальные заголовки передать?

Код программы:
.h
Код:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
 
#include <QMainWindow>
#include <QtNetwork/QNetworkAccessManager>
#include <QUrl>
#include <QtNetwork/QNetworkRequest>
#include <QtNetwork/QNetworkReply>
#include <QDebug>
 
namespace Ui {
    class MainWindow;
}
 
class MainWindow : public QMainWindow
{
    Q_OBJECT
 
public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
 
private:
    Ui::MainWindow *ui;
 
private slots:
    void on_pushButton_clicked();
    void searshFinished(QNetworkReply*);
};
 
#endif // MAINWINDOW_H

.cpp

Код:
#include "mainwindow.h"
#include "ui_mainwindow.h"
 
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}
 
MainWindow::~MainWindow()
{
    delete ui;
}
 
void MainWindow::on_pushButton_clicked()
{
    QNetworkRequest request;
    request.setUrl(QUrl("http://www.yandex.ru/"));
    request.setRawHeader("Host", "yandex.ru");
    request.setRawHeader("User-Agent", "Mozilla/5.0 (X11; U; Linux x86_64; ru; rv:1.9.0.10) Gecko/2009042809 GranParadiso/3.0.10");
    //request.setRawHeader("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3 (.NET CLR 3.5.30729)");
    //request.setRawHeader("User-Agent", "Opera/9.80 (Windows NT 6.1; U; en) Presto/2.9.168 Version/11.50");
    //request.setRawHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
    //request.setRawHeader("Accept-Language", "en-us,en;q=0.5");
    //request.setRawHeader("Accept-Encoding", "gzip,deflate");
    //request.setRawHeader("Accept-Charset", "ISO-8859-1,utf-8;q=0.7,*;q=0.7");
    request.setRawHeader("Keep-Alive", "115");
    request.setRawHeader("Connection", "keep-alive");
    //request.setRawHeader("Referer", urlBytes);
    //request.setRawHeader("Cookie", "");
    //request.setRawHeader("Content-Type", "application/x-www-form-urlencoded");
    //request.setRawHeader("Content-Length", "557");
 
 
    QNetworkAccessManager* manager = new QNetworkAccessManager(this);
    connect(manager, SIGNAL(finished(QNetworkReply*)),this, SLOT(searshFinished(QNetworkReply*)));
    manager->get(request);
}
 
void MainWindow::searshFinished(QNetworkReply* reply)
{
    QByteArray ansver = reply->read(reply->bytesAvailable());
    qWarning() << ansver;
}

Скачать прогу можно отсюда
Записан
Igore
Гость
« Ответ #1 : Август 17, 2011, 16:40 »

У меня ответил. Qt 4.7.3, windows:
"<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><title>Яндекс</title>..." и т.д.
Программа рабочая, разбирайся с окружением. Интернет через прокси?

По поводу 302
Цитировать
QNetworkRequest::RedirectionTargetAttribute   2   Replies only, type: QVariant::Url (no default) If present, it indicates that the server is redirecting the request to a different URL. The Network Access API does not by default follow redirections: it's up to the application to determine if the requested redirection should be allowed, according to its security policies. The returned URL might be relative. Use QUrl::resolved() to create an absolute URL out of it.
http://www.qtforum.org/article/29493/problems-with-qnetworkaccessmanager.html
« Последнее редактирование: Август 17, 2011, 16:50 от Igore » Записан
vbi
Гость
« Ответ #2 : Август 17, 2011, 17:41 »

 Шокированный Шокированный Шокированный
та нет. Подключен напрямую к билайн по кабелю
Записан
vbi
Гость
« Ответ #3 : Август 17, 2011, 17:43 »

У меня 4.7.0 Попробую переустановить...
Записан
vbi
Гость
« Ответ #4 : Август 17, 2011, 23:06 »

Поставил последнюю версию, то же самое, запрос пустой, а вот в QWebView страница яндекса нормально загружается. А QNetworkReply возвращает пустую строку, в чем же проблема?
Записан
sendevent
Гость
« Ответ #5 : Август 18, 2011, 12:22 »

глянь сниффером - мож че полезное найдешь.
Записан
vbi
Гость
« Ответ #6 : Август 18, 2011, 15:01 »

Проверил. Все равно что-то не пойму.
Вот мой запрос:
Цитировать
No.     Time        Source                Destination           Protocol Length Hypertext Transfer Protocol Info
      6 0.671130    172.25.0.22           93.158.134.203        HTTP     288    Yes                         GET / HTTP/1.1

Frame 6: 288 bytes on wire (2304 bits), 288 bytes captured (2304 bits)
Ethernet II, Src: Pegatron_ce:67:77 (70:71:bc:ce:67:77), Dst: EdimaxTe_96:43:13 (00:50:fc:96:43:13)
Internet Protocol Version 4, Src: 172.25.0.22 (172.25.0.22), Dst: 93.158.134.203 (93.158.134.203)
Transmission Control Protocol, Src Port: 53921 (53921), Dst Port: http (80), Seq: 1, Ack: 1, Len: 234
Hypertext Transfer Protocol
    GET / HTTP/1.1\r\n
        [Expert Info (Chat/Sequence): GET / HTTP/1.1\r\n]
            [Message: GET / HTTP/1.1\r\n]
            [Severity level: Chat]
            [Group: Sequence]
        Request Method: GET
        Request URI: /
        Request Version: HTTP/1.1
    Host: www.yandex.ru\r\n
    User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; ru; rv:1.9.0.10) Gecko/2009042809 GranParadiso/3.0.10\r\n
    Keep-Alive: 115\r\n
    Connection: keep-alive\r\n
    Accept-Encoding: gzip\r\n
    Accept-Language: uk-UA,en,*\r\n
    \r\n
    [Full request URI: http://www.yandex.ru/]

А это ответ (пустой):
Цитировать
No.     Time        Source                Destination           Protocol Length Hypertext Transfer Protocol Info
      9 0.760279    93.158.134.203        172.25.0.22           HTTP     635    Yes                         HTTP/1.1 302 Found

Frame 9: 635 bytes on wire (5080 bits), 635 bytes captured (5080 bits)
Ethernet II, Src: EdimaxTe_96:43:13 (00:50:fc:96:43:13), Dst: Pegatron_ce:67:77 (70:71:bc:ce:67:77)
Internet Protocol Version 4, Src: 93.158.134.203 (93.158.134.203), Dst: 172.25.0.22 (172.25.0.22)
Transmission Control Protocol, Src Port: http (80), Dst Port: 53921 (53921), Seq: 1, Ack: 235, Len: 581
Hypertext Transfer Protocol
    HTTP/1.1 302 Found\r\n
        [Expert Info (Chat/Sequence): HTTP/1.1 302 Found\r\n]
            [Message: HTTP/1.1 302 Found\r\n]
            [Severity level: Chat]
            [Group: Sequence]
        Request Version: HTTP/1.1
        Status Code: 302
        Response Phrase: Found
    Server: nginx\r\n
    Date: Thu, 18 Aug 2011 11:43:29 GMT\r\n
    Connection: close\r\n
    Cache-Control: no-cache,no-store,max-age=0,must-revalidate\r\n
    Location: http://pass.yandex.ru/?retpath=http%3A%2F%2Fwww.yandex.ua\r\n
    Content-Length: 0\r\n
    Expires: Thu, 18 Aug 2011 11:43:29 GMT\r\n
    Last-Modified: Thu, 18 Aug 2011 11:43:29 GMT\r\n
    P3P: policyref="/w3c/p3p.xml", CP="NON DSP ADM DEV PSD IVDo OUR IND STP PHY PRE NAV UNI"\r\n
    Set-Cookie: yandexuid=9523829581313667809; domain=.yandex.ru; path=/; expires=Sun, 15-Aug-2021 11:43:29 GMT\r\n
    X-XRDS-Location: http://openid.yandex.ru/server_xrds/\r\n
    \r\n
Записан
vbi
Гость
« Ответ #7 : Август 18, 2011, 15:06 »

По ходу не находит его чтоли?
Записан
Serr500
Гость
« Ответ #8 : Август 18, 2011, 15:16 »

http://ru.wikipedia.org/wiki/%D0%A1%D0%BF%D0%B8%D1%81%D0%BE%D0%BA_%D0%BA%D0%BE%D0%B4%D0%BE%D0%B2_%D1%81%D0%BE%D1%81%D1%82%D0%BE%D1%8F%D0%BD%D0%B8%D1%8F_HTTP#302
Записан
vbi
Гость
« Ответ #9 : Август 18, 2011, 15:24 »

Попробовал сделать запрос на "http://www.yandex.ua", Выдает то же:

Цитировать
No.     Time        Source                Destination           Protocol Length Hypertext Transfer Protocol Info
      7 1.065026    87.250.251.3          172.25.0.22           HTTP     605    Yes                         HTTP/1.1 302 Found

Frame 7: 605 bytes on wire (4840 bits), 605 bytes captured (4840 bits)
Ethernet II, Src: EdimaxTe_96:43:13 (00:50:fc:96:43:13), Dst: Pegatron_ce:67:77 (70:71:bc:ce:67:77)
Internet Protocol Version 4, Src: 87.250.251.3 (87.250.251.3), Dst: 172.25.0.22 (172.25.0.22)
Transmission Control Protocol, Src Port: http (80), Dst Port: 54216 (54216), Seq: 1, Ack: 235, Len: 551
Hypertext Transfer Protocol
    HTTP/1.1 302 Found\r\n
        [Expert Info (Chat/Sequence): HTTP/1.1 302 Found\r\n]
        Request Version: HTTP/1.1
        Status Code: 302
        Response Phrase: Found
    Server: nginx\r\n
    Date: Thu, 18 Aug 2011 12:17:34 GMT\r\n
    Connection: close\r\n
    Cache-Control: no-cache,no-store,max-age=0,must-revalidate\r\n
    Location: http://pass.yandex.ua/?retpath=http%3A%2F%2Fwww.yandex.ua%2F\r\n
    Content-Length: 0\r\n
    Expires: Thu, 18 Aug 2011 12:17:35 GMT\r\n
    Last-Modified: Thu, 18 Aug 2011 12:17:35 GMT\r\n
    P3P: policyref="/w3c/p3p.xml", CP="NON DSP ADM DEV PSD IVDo OUR IND STP PHY PRE NAV UNI"\r\n
    Set-Cookie: Cookie_check=CheckCookieCheckCookie; domain=.yandex.ua; path=/\r\n
    X-XRDS-Location: http://openid.yandex.ru/server_xrds/\r\n
    \r\n
Записан
vbi
Гость
« Ответ #10 : Август 18, 2011, 15:25 »

Делаю запрос на "http://pass.yandex.ua/?retpath=http%3A%2F%2Fwww.yandex.ua%2F\r\n"
Выдает вот что:
Цитировать
No.     Time        Source                Destination           Protocol Length Hypertext Transfer Protocol Info
      6 0.106435    213.180.204.47        172.25.0.22           HTTP     497    Yes                         HTTP/1.1 302 Moved Temporarily

Frame 6: 497 bytes on wire (3976 bits), 497 bytes captured (3976 bits)
Ethernet II, Src: EdimaxTe_96:43:13 (00:50:fc:96:43:13), Dst: Pegatron_ce:67:77 (70:71:bc:ce:67:77)
Internet Protocol Version 4, Src: 213.180.204.47 (213.180.204.47), Dst: 172.25.0.22 (172.25.0.22)
Transmission Control Protocol, Src Port: http (80), Dst Port: 54240 (54240), Seq: 1, Ack: 287, Len: 443
Hypertext Transfer Protocol
    HTTP/1.1 302 Moved Temporarily\r\n
        [Expert Info (Chat/Sequence): HTTP/1.1 302 Moved Temporarily\r\n]
        Request Version: HTTP/1.1
        Status Code: 302
        Response Phrase: Moved Temporarily
    Server: nginx\r\n
    Date: Thu, 18 Aug 2011 12:23:28 GMT\r\n
    Transfer-Encoding: chunked\r\n
    Connection: close\r\n
    Location: http://passport.yandex.ru/passport?trace=pass-f2.8788.ebadretp1&mode=error&error=badretpath&badretpath=http%253A%252F%252Fwww.yandex.ua%252F%0D%0A\r\n
    Expires: Thu, 01 Jan 1970 00:00:01 GMT\r\n
    Cache-Control: no-cache\r\n
    Cache-Control: no-cache, private, no-cache, no-store, must-revalidate, max-age=0\r\n
    \r\n
    HTTP chunked response
Записан
vbi
Гость
« Ответ #11 : Август 18, 2011, 15:28 »

Вот при переходе сюда: "http://passport.yandex.ru/passport?trace=pass-f2.8788.ebadretp1&mode=error&error=badretpath&badretpath=http%253A%252F%252Fwww.yandex.ua%252F%0D%0A\r\n"
наконец то загружается хоть что-то. Но это всего-лиш страница с предупреждением о фишинге... Грустный
Записан
Serr500
Гость
« Ответ #12 : Август 18, 2011, 16:52 »

Хм... Странно... Попробуйте указать referer.
Записан
vbi
Гость
« Ответ #13 : Август 19, 2011, 09:02 »

Та не помогает... Что ж буду наверно пользоватся QWebView. Этот компонент сам решает множество проблем.
Записан
sendevent
Гость
« Ответ #14 : Август 19, 2011, 16:56 »

Не, ну понятно - не получается, бесит, но зачем яндекс-то ломать было?  Смеющийся
(Похоже, из Росси он сейчас не доступен - лежит, и в твиттере народ жалуется, и я попасть не могу).
Если серьезно - при переходе на новый локейшн, указанный в первом редиректе, необходимо передавать и установленные куки - практически уверен, проблема в них (из "Set-Cookie: yandexuid=9523829581313667809; domain=.yandex.ru; path=/; expires=Sun, 15-Aug-2021 11:43:29 GMT" - предпоследняя строчка ответа на первый гет).
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.132 секунд. Запросов: 20.