• 3053阅读
  • 0回复

[提问]Qt请求射手网api数据,下载字幕出现问题。 [复制链接]

上一主题 下一主题
离线xsjqqq123
 

只看楼主 倒序阅读 楼主  发表于: 2014-10-05
        以下是用射手网api写的请求字幕数据的一些代码,为什么总是不成功?获取文件hash部分是正确的,我拦截别人写的字幕批量下载时,它post出去的数据也是一样的啊,为什么我的没有结果?是不是这样post方式不正确?
  1. #include "widget.h"
  2. #include "ui_widget.h"
  3. #include <QFile>
  4. #include <QFileInfo>
  5. #include <QCryptographicHash>
  6. #include <QNetworkAccessManager>
  7. #include <QNetworkReply>
  8. #include <QNetworkRequest>
  9. #include <QEventLoop>
  10. #include <QSslConfiguration>
  11. #include <QSsl>
  12. #include <QDebug>
  13. Widget::Widget(QWidget *parent) :
  14.     QWidget(parent),
  15.     ui(new Ui::Widget)
  16. {
  17.     ui->setupUi(this);
  18.     getLocalFileSub("F:/Space.Station.76.2014.720p.HDRip.x264.AC3.5.1-RARBG.mkv");
  19. }
  20. Widget::~Widget()
  21. {
  22.     delete ui;
  23. }
  24. void Widget::getLocalFileSub(QString filePath)
  25. {
  26.     QNetworkAccessManager *manager = new QNetworkAccessManager;
  27.     QString fileHash = computerLocalFileHash(filePath);
  28.     QNetworkRequest request(QUrl("http://www.shooter.cn/api/subapi.php"));
  29.     QByteArray postData;
  30.     postData.append(QString("filehash=%0&pathinfo=%1&format=json").arg(QString(fileHash.toUtf8().toPercentEncoding())).arg(QString(filePath.toUtf8().toPercentEncoding())));
  31.     request.setHeader(QNetworkRequest::ContentTypeHeader,"multipart/form-data");
  32.     request.setHeader(QNetworkRequest::UserAgentHeader,"SPlayer Build 580");
  33.     QNetworkReply *reply = manager->post(request,postData);
  34.     QEventLoop loop;
  35.     QObject::connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));
  36.     loop.exec();
  37.     QByteArray data = reply->readAll();//
  38.     qDebug()<<postData<<data;
  39. }
  40. QString Widget::computerLocalFileHash(QString filePath)
  41. {
  42.     QStringList fileHashList;
  43.     QFile file(filePath);
  44.     file.open(QFile::ReadOnly);
  45.     QFileInfo fileInfo(file);
  46.     qint64 ftotallen = fileInfo.size();
  47.     qint64 offset[4];
  48.     offset[3] = ftotallen - 8192;
  49.     offset[2] = ftotallen / 3;
  50.     offset[1] = ftotallen / 3 * 2;
  51.     offset[0] = 4096;
  52.     file.seek(offset[0]);
  53.     QByteArray data0 = file.read(4096);
  54.     QByteArray md5_0 = QCryptographicHash::hash(data0,QCryptographicHash::Md5).toHex();
  55.     fileHashList.append(md5_0);
  56.     file.seek(offset[1]);
  57.     QByteArray data1 = file.read(4096);
  58.     QByteArray md5_1 = QCryptographicHash::hash(data1,QCryptographicHash::Md5).toHex();
  59.     fileHashList.append(md5_1);
  60.     file.seek(offset[2]);
  61.     QByteArray data2 = file.read(4096);
  62.     QByteArray md5_2 = QCryptographicHash::hash(data2,QCryptographicHash::Md5).toHex();
  63.     fileHashList.append(md5_2);
  64.     file.seek(offset[3]);
  65.     QByteArray data3 = file.read(4096);
  66.     QByteArray md5_3 = QCryptographicHash::hash(data3,QCryptographicHash::Md5).toHex();
  67.     fileHashList.append(md5_3);
  68.     return fileHashList.join(";");
  69. }
以下是射手网给的API说明:
两个html文件:http://pan.baidu.com/s/1o6G6eNK ,google被封,我下载来的。

快速回复
限100 字节
 
上一个 下一个