Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Yandex не отвечает
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Ввод/Вывод, Сеть. Межпроцессное взаимодействие
vbi
Написал програмку, которая посылает 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;
}


Скачать прогу можно отсюда
PAFOS
у меня все правильно отработал.

Но справедливости ради скажу что я работаю через HTTP прокси
vbi
Что ж такое. Скажите, у кого-нибудь еще работает, но кто не через прокси?
PAFOS
попробуй reply->readAll();
vbi
Пробовал, то же самое. Но прослушав сниффером, увидел, что текст ответа пустой, а в заголовке ответа есть редирект, но пройдя последовательно по всем редиректам попадаю на страницу оповещения яндекса о возможной подмене страницы злоумышлинниками.
ufna
а без www пробовал?
vbi
без www редиректит на www
vbi
Буду пользоватся QWebView, там проблем нет
thechicho
подскажите, плиз, примером кода, как обрабатывать редиректы? в cURL на php я использовал FOLLOWLOCATION, true. есть ли аналог в Qt? или нужно каждый раз парсить из заголовков ответа Location: url и делать на него request?

//Буду пользоватся QWebView, там проблем нет
приведите пример кода?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.