IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> Http访问失败解决 -> 正文阅读

[网络协议]Http访问失败解决

方式1:基于QT的QNetworkReply访问http

//头文件
#include <QtNetwork>
#include <QtCore>

class RequestManager: public QObject
{
    Q_OBJECT
public:
    explicit RequestManager(QObject *parent = nullptr, QString header = QString("text/xml"));

    bool request(QUrl m_url);
    QString getResponse() { return m_response; }


signals:
    void finished();

private slots:
    void requestFinished();
    void requestReadyRead();

private:
    bool isHttpRedirect() const;
    void reportRedirect();

    QUrl m_url;
    QNetworkAccessManager m_manager;
    QNetworkReply *m_currentDownload = nullptr;
    QString m_response;
    QString m_header;
};
//源文件
#include "requestmanager.h"

#include <QDebug>

#include <cstdio>

using namespace std;

RequestManager::RequestManager(QObject *parent, QString header)
    : QObject(parent)
{
    m_response = "";
    m_header = header;
}

bool RequestManager::request(QUrl aUrl)
{
    m_url = aUrl;
    QNetworkRequest request(m_url);

    request.setRawHeader("Accept", m_header.toUtf8());

    m_currentDownload = m_manager.get(request);

    connect(m_currentDownload, SIGNAL(readyRead()),
            SLOT(requestReadyRead()));

    connect(m_currentDownload, SIGNAL(finished()),
            SLOT(requestFinished()));

    return true;

}

void RequestManager::requestFinished()
{
    if (m_currentDownload->error()) {
        qWarning() << "Request Error: " << m_currentDownload->errorString();
    } else {
        // check if it was a redirect
        if (isHttpRedirect()) {
            reportRedirect();
            m_response = "";

            QUrl lastUrl = m_currentDownload->request().url();

            m_currentDownload->deleteLater();
            if (lastUrl != m_url)
                request(m_url);
            return;
        }
    }

    QList<QNetworkReply::RawHeaderPair> l = m_currentDownload->rawHeaderPairs();
    int sz = l.count();
    for(int i = 0; i<sz; i++)
    {
        QNetworkReply::RawHeaderPair pair = l[i];

        if (pair.first == "Content-Type")
        {
            QString responseHeader = pair.second;

            if (!((m_header.contains("json", Qt::CaseInsensitive) && responseHeader.contains("json", Qt::CaseInsensitive)) ||
                (m_header.contains("xml", Qt::CaseInsensitive) && responseHeader.contains("xml", Qt::CaseInsensitive))))
                m_response = "MT Agent does not support request protocol " + m_header;
            break;
        }
    }

    m_currentDownload->deleteLater();
    emit finished();
}

void RequestManager::requestReadyRead()
{
    m_response += m_currentDownload->readAll();
}

bool RequestManager::isHttpRedirect() const
{
    int statusCode = m_currentDownload->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
    return statusCode == 301 || statusCode == 302 || statusCode == 303
           || statusCode == 305 || statusCode == 307 || statusCode == 308;
}

void RequestManager::reportRedirect()
{
    int statusCode = m_currentDownload->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
    QUrl requestUrl = m_currentDownload->request().url();
    qWarning() << "Request: " << requestUrl.toDisplayString()
                        << " was redirected with code: " << statusCode;

    QVariant target = m_currentDownload->attribute(QNetworkRequest::RedirectionTargetAttribute);
    if (!target.isValid())
        return;

    QUrl redirectUrl = target.toUrl();
    if (redirectUrl.isRelative())
        redirectUrl = requestUrl.resolved(redirectUrl);

    qWarning() << "Redirected to: " << redirectUrl.toDisplayString();

    m_url = redirectUrl;
}

错误:Request Error: “Connection closed”

方式2:基于c#访问
错误:Request Error: “Connection closed”
代码如下

//请求的URL链接
                String URL = "http://192.168.16.230:7878/probe";
                //创建HttpWebRequest 
                HttpWebRequest myrq = (HttpWebRequest)WebRequest.Create(URL);

                myrq.KeepAlive = true ;
                myrq.Timeout = 30 * 1000; //超时时间
                myrq.Method = "Get";  //请求方式 
                myrq.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8";
                myrq.Host = "192.168.16.230:7878"; //来源
                //定义浏览器代理
                myrq.UserAgent = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 UBrowser/6.2.4098.3 Safari/537.36";

                //请求网页
                HttpWebResponse myrp = (HttpWebResponse)myrq.GetResponse();

                //判断请求状态
                if (myrp.StatusCode != HttpStatusCode.OK)
                {
                    return;
                }

                //打印网页源码
                using (StreamReader sr = new StreamReader(myrp.GetResponseStream()))
                {
                    Console.Write(sr.ReadToEnd());
                }

                Console.ReadKey(); 

方式3:基于curl访问

curl  http://192.168.16.230:7878

错误:curl: (1) Received HTTP/0.9 when not allowed

原因:因为此http server是HTTP/0.9版本,QT和C#都不支持这么低版本。
解决:curl --http0.9 http://192.168.16.230:7878 成功读取。

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-11-10 12:45:58  更:2021-11-10 12:47:58 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年7日历 -2024/7/1 21:00:58-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码