C++模拟爱奇艺web视频上传

c++模拟爱奇艺web视频上传 说明 此次学习的是HTTP的post协议,使用使用multipart form-data上传文件, 理解HTTP消息头 (五)——使用multipart/form-data上传文件 写的比较好的一篇帖子 https://www

本文包含相关资料包-----> 点击直达获取<-------

c++模拟爱奇艺web视频上传

说明

此次学习的是HTTP的post协议,使用使用multipart form-data上传文件。

理解HTTP消息头 (五)——使用multipart/form-data上传文件

写的比较好的一篇帖子 https://www.cnblogs.com/liqiu/archive/2013/05/24/3096378.html

HTTP1.1封装

简单封装了HTTP1.1的get和post,实现http的长连接模式,实现发送和数据接收。简单实现了socket的复用。

Get封装

c++ bool HttpConnect::getData1_1(std::string host, std::string path, std::string get_content) { //GET请求方式 std::stringstream stream; stream << "GET " << path << "?" << get_content; stream << " HTTP/1.1\r\n"; stream << "Accept: */*\r\n"; stream << "Host: " << host << "\r\n"; stream << "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3\r\n"; stream << "Connection: Keep-Alive\r\n\r\n"; return socketHttp(host, stream.str()); }

post封装

c++ void HttpConnect::postData(std::string host, std::string path, std::string post_content) { //POST请求方式 std::stringstream stream; stream << "POST " << path; stream << " HTTP/1.1\r\n"; stream << "Host: " << host << "\r\n"; stream << "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3\r\n"; stream << "Content-Type: application/x-www-form-urlencoded\r\n"; stream << "Content-Length: " << post_content.length() << "\r\n\r\n"; stream << post_content.c_str(); socketHttp(host, stream.str()); }

C++ 模拟POST,multipart/form-data格式上传

```c++ long nFileSize = 0; char * pFileBuf = ReadFileBuf(g_strfile.c_str(),&nFileSize); g_filesize = nFileSize;

int nCount = g_filesize/65536;
int nLeave = g_filesize%65536;

for(int i =0;i< nCount+1;i++)
{
    __int64 dwTime = GetSysTimeMicros()/1000;

    std::string strBoundary = GetRamdomBoundary();

    std::string strConBoundary = "--" + strBoundary;

    std::stringstream  contentStram;
    contentStram << strConBoundary  << "\r\n";
    contentStram << "Content-Disposition: form-data; name=\"file_id\"\r\n\r\n";
    contentStram << g_file_id << "\r\n";

    contentStram << strConBoundary << "\r\n";
    contentStram << "Content-Disposition: form-data; name=\"file_size\"\r\n\r\n";
    contentStram << g_filesize << "\r\n";

    contentStram << strConBoundary << "\r\n";
    contentStram << "Content-Disposition: form-data; name=\"range\"\r\n\r\n";

    int nStart = 0;
    nStart = i* 65536;
    int nLast = 0;
    int nSendSize = 0;
    if (i != nCount)
    {
        nLast = nStart + 65535;
        nSendSize = 65536;
    }
    else
    {
        if (nLeave == 0)
            break;
        nLast = nStart + nLeave - 1;
        nSendSize = nLeave;
    }

    //contentStram << "0-65535" << "\r\n";
    contentStram << nStart << "-" << nLast << "\r\n";

    contentStram << strConBoundary << "\r\n";
    contentStram << "Content-Disposition: form-data; name=\"file\"; filename=\"blob\"\r\n";
    //contentStram << "Content-Type: application/octet-stream\r\n\r\n";
    contentStram << "Content-Type: video/mp4\r\n\r\n";

    std::string strContentData = contentStram.str();
    strContentData.append(pFileBuf+nStart,nSendSize);
    strContentData.append("\r\n");
    strContentData.append(strConBoundary);
    strContentData.append("--\r\n\r\n");
    int nContentLen = strContentData.size();


    //////////////////////////////////////////////////////////////
    std::stringstream streamPost;
    streamPost << "POST /upload?t=" << dwTime << " HTTP/1.1\r\n";
    streamPost << "Accept: */*\r\n";
    streamPost << "Content-Type: multipart/form-data; boundary="<<strBoundary<<"\r\n";
    streamPost << "User-Agent: Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)\r\n";
    streamPost << "Host: "<< host << "\r\n";
    streamPost << "DNT: 1\r\n";
    streamPost << "Connection: keep-alive\r\n";
    streamPost << "Cache-Control: no-cache\r\n";
    streamPost << g_cookie << "\r\n";
    streamPost << "Content-Length: " << nContentLen << "\r\n\r\n";

    std::string PostContent = streamPost.str();
    int nHeadSize = PostContent.size();
    PostContent.append(strContentData.c_str(),nContentLen);
    int nPostSize = PostContent.size();
    if (http.socketHttp(host,PostContent) == false)
    {
        AfxMessageBox(_T("发包失败!"));
        break;
    }
    else
    {
        std::string strGetResult = http.GetLastRequestResult();

        std::wstring wStr;
        Transcode::UTF8_to_Unicode(strGetResult.c_str(), strGetResult.size(), wStr);
        const wchar_t* pData = wStr.c_str();
        OutputDebugString(pData);
    }
}

```

爱奇艺web上传需要参数

1、cookie = Cookie: P00004=.1543915259.61731a407d; QC173=0; QC001=1; QC006=12e....

2、access_token = 2.xxx

这两个数值都可以抓包获取,请手动更新

测试截图

上传log显示

snatshot.png

遗留问题

视频上传成功,但是无法过爱奇艺的后台检测。不是这次学习的重点,未做研究!

snatshot2.png

参考文献

  • 视频流媒体推荐系统的设计与实现(东北大学·王书剑)
  • 基于Web下的远程教学系统的设计与实现(吉林大学·王骥)
  • 基于SSH的网络教育视频点播系统的设计与实现(江西农业大学·梁于玲)
  • 基于.NET自定义控件的社区网站系统研究与实现(武汉理工大学·刘亚)
  • 基于用户兴趣的手机终端视频推荐系统(大连理工大学·付红升)
  • 基于ASP.NET MVC框架的客户关系管理系统的设计与实现(吉林大学·杨国兴)
  • 基于JSP的视频点播系统设计与实现(厦门大学·常雯)
  • 基于JSP语言的校园网视频点播系统的设计与实现(电子科技大学·苏超)
  • 基于PHP+MySQL的交互学习系统的设计与实现(吉林大学·刘博)
  • 局域网P2P视频点播与管理系统的设计与实现(电子科技大学·陶波)
  • 基于J2EE和MVC的Web应用的研究(沈阳工业大学·朱云娜)
  • 基于Asp.Net和Ajax技术的BBS系统的设计与研究(南昌大学·陶勇强)
  • 基于J2EE和MVC的Web应用的研究(沈阳工业大学·朱云娜)
  • 基于SSH架构的个人空间交友网站的设计与实现(北京邮电大学·隋昕航)
  • 基于ASP.NET的校园视频网络系统的设计与实现(北京邮电大学·杨晓禹)

本文内容包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主题。发布者:源码工坊 ,原文地址:https://bishedaima.com/yuanma/35946.html

相关推荐

  • 基于SpringBoot框架的旅游网站平台

    这是一套采用Java语言编写的旅游网站平台源代码,基于流行的SpringBoot框架构建,该项目融入了Vue技术,开发工具为Idea或Eclipse,它是一个功能完备的旅游在线服务平台
    2024年05月23日
    20 1 3
  • 基于SpringBoot框架的企业oa管理系统

    这是一套采用🔥🔥SpringBoot框架构建的企业级OA管理系统的源代码,主要编程语言为Java,并结合了SpringBoot和Vue技术进行开发,开发工具选择的是Idea或Eclipse
    2024年05月23日
    3 1 1
  • Java+SSM实现复杂权限控制的教务管理,教务评教系统

    这是一个🔥🔥SSM实现复杂权限控制的教务管理,教务评教系统🔥🔥的项目源码,开发语言Java,开发环境Idea/Eclipse,这个 教务管理系统开发技术栈为SSM项目,可以作为毕业设计课程设计作业为大学教务处实现一个带有权限控制的教务管理系统
    2024年05月23日
    17 1 3
  • 二维非稳态热传导 膏体发动机之Python

    二维非稳态热传导 膏体发动机 一,划分网格: X 方向网格:20;Y 方向网格:20 材料 1:材料 2:材料 1=8:4:8 总网格数量:400 网格尺寸: 注意有界性条件:方程的各项系数大于 0 显式格式: 网格时 网格时 隐式格式: 有界性条件自动满足 C-N 格式: 二
    2024年05月14日
    1 1 1
  • QT实现局域网聊天软件代码

    在当今数字化时代,实时通讯已经成为人们生活和工作中不可或缺的一部分,随着互联网的快速发展,人们对于即时沟通的需求也在不断增加,在企业和个人之间,局域网聊天软件的需求日益突出
    2024年05月07日
    12 1 2
  • 基于java开发教室预约Web

    Class Int—教室资源管理系统 一,需求介绍 1,1 项目前景 近年来,随着高校不断的扩招,在校师生人数不断增加,各级高校都迫切需要提高工作质量和工作效率
    2024年05月14日
    1 1 1
  • 基于SpringBoot和MySQL的图书管理系统

    基于SpringBoot和MySQL的图书管理系统 1,前言 该图书管理系统是基于SpringBoot的项目,希望能够和小伙伴们一起学习,得到宝贵的意见
    2024年05月14日
    3 1 2
  • SSM实现值班管理系统排班管理系统

    值班管理系统是现代组织中不可或缺的一部分,其对于人力资源的合理调配和工作效率的提升至关重要,随着信息技术的迅速发展,基于Spring,SpringMVC和MyBatis的值班管理系统(SSM实现值班管理系统)逐渐成为研究和应用的热点
    2024年05月07日
    9 1 4
  • 基于SpringBoot框架的社团管理系统

    这是一套采用Java语言编写的🔥🔥SpringBoot核心框架的社团管理应用源代码🔥🔥,该项目运用了SpringBoot和Vue技术栈,开发工具为Idea或Eclipse
    2024年05月23日
    2 1 1
  • 基于SSM框架的邮件系统设计与实现

    这是一个🔥🔥基于SSM框架的邮件系统设计与实现🔥🔥的项目源码,开发语言Java,开发环境Idea/Eclipse,这个 邮件系统设计开发技术栈为SSM项目,可以作为毕业设计课程设计作业设计实现一个在线邮件系统
    2024年05月23日
    1 1 1

发表回复

登录后才能评论