Wt库的下载器程序

news2024/10/5 16:31:26

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <microhttpd.h>

// 设置服务器的地址和端口号
const char *proxy_host = "";
const int proxy_port = 8000;

// 下载的文件路径
const char *filename = "xiuxiu.meitu.com";

// 定义下载函数
void download(void *cls, connection *c, const char *url, const char *content_type, const char *filename, off_t start, size_t len, struct MHD_Connection客车 *cls) {
    // 获取文件大小
    FILE *fp = fopen(filename, "rb");
    fseek(fp, start, SEEK_SET);
    int file_size = ftell(fp);
    fclose(fp);

    // 创建管道,通过管道将下载内容发送到服务器
    int pipefd[2];
    if (pipe(pipefd) < 0) {
        perror("pipe");
        exit(EXIT_FAILURE);
    }

    // 创建子进程,通过子进程将下载内容发送理服务器
    pid_t pid = fork();
    if (pid < 0) {
        perror("fork");
        exit(EXIT_FAILURE);
    }

    if (pid == 0) {
        // 子进程
        FILE *fp = fopen(filename, "rb");
        char *buffer = malloc(len + 1);
        if (buffer == NULL) {
            perror("malloc");
            exit(EXIT_FAILURE);
        }
        int read_len;
        while ((read_len = fread(buffer, 1, len, fp)) > 0) {
            write(pipefd[1], buffer, read_len);
            buffer += read_len;
        }
        close(pipefd[1]);
        fclose(fp);
        wait(NULL);
        free(buffer);
        exit(EXIT_SUCCESS);
    } else {
        // 父进程
        char *command = "curl -s -o /dev/null -w '%{http_code}' -H 'Host: www.duoip.cn' -H 'Proxy-Authorization: Basic YWRtaW46cm9vbWlu' -X GET -H 'Connection: close' http://www.duoip.cn:8000/%s";
        char *proxy_command = (char *) malloc(strlen(command) + strlen(filename) + 1);
        if (proxy_command == NULL) {
            perror("malloc");
            exit(EXIT_FAILURE);
        }
        strcpy(proxy_command, command);
        strcat(proxy_command, filename);
        int status;
        if (sysexits(status = system(proxy_command)) != 0) {
            perror("system");
            exit(EXIT_FAILURE);
        }
        close(pipefd[0]);
        close(pipefd[1]);
        wait(NULL);
        free(proxy_command);
    }
}

// 创建服务器
void start_server(void) {
    microhttpd_t *mh = MHD_create_server_from_socket(proxy_port, &download, NULL, 4096);
    if (mh == NULL) {
        perror("MHD_create_server_from_socket");
        exit(EXIT_FAILURE);
    }
    MHD_run(mh, NULL);
}

int main() {
    start_server();
    return 0;

这个程序首先定义了我们要使用的服务器和端口,然后定义了一个下载任务函数,它会创建一个新的下载任务并开始下载指定的URL。下载完成后,它会保存文件并删除下载任务。程序还定义了一个下载完成事件处理器,它会在下载任务完成后打印一条消息并删除这个任务。

在主函数中,我们首先创建了一个Web服务器和一个Web会话,然后处理来自客户端的GET请求。如果请求的URL参数是"download",我们就创建一个新的下载任务并开始下载文件。下载完成后,我们返回一个成功响应。如果请求的URL参数不是"download",我们就返回一个错误响应。

注意,这个程序只是一个简单的示例,实际的下载器程序可能需要处理更多的错误情况和异常,并且可能需要使用更复杂的网络库来处理服务器。此外,这个程序还假设你的服务器运行在端口上,并且你的Web应用程序使用Wt库。如果你的服务器运行在不同的端口上,或者你的Web应用程序使用了不同的库,你可能需要修改这个程序以适应你的环境。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1139424.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

电脑桌面文件不见了怎么恢复?4个方法!(详细步骤分享)

“这下可怎么办呀&#xff1f;我有些比较重要的文件保存在桌面&#xff0c;现在这些文件都莫名奇妙的丢失了&#xff0c;我应该怎么将它们恢复呢&#xff1f;快帮帮我吧&#xff01;” 在日常使用电脑时&#xff0c;很多电脑用户为了方便&#xff0c;可能会随手将一些文件直接保…

微信视频怎么录屏?超简单教程,一学就会!

“微信视频的时候怎么录屏呀&#xff1f;和朋友打微信视频&#xff0c;她每次都偷偷录我的丑照&#xff0c;我也想把她录下来&#xff0c;但是不会怎么操作&#xff0c;求求大家教教我&#xff01;” 微信作为全球最大的社交媒体平台之一&#xff0c;承载了无数珍贵的瞬间和回…

iPhone强制重启教程来了!(已解决)

强制重启是解决苹果手机系统故障问题的首选操作&#xff0c;是通过特殊组合按键来强制关机并重新启动设备的操作。可以用来应对系统崩溃、设备无响应、白苹果、死机、闪退、莫名其妙黑屏等情况。 那么大家知道该如何将iPhone手机强制重启吗&#xff1f;iphone强制重启的方法是…

福建厦门航空飞机零部件检测3D扫描测量尺寸偏差-CASAIM中科广电

航空航天是一个创新型发展国家的尖端命脉&#xff0c;代表着一个国家科学技术的先进水平。在航空航天工业的发展和组成领域中&#xff0c;对于在制造业中的航空航天产品零部件精度要求十分严苛&#xff0c;从前期的设计、中期建造、后期维修检测&#xff0c;任何一个环节、任何…

Mybatis一对多查询,分页显示问题解决方案

原文&#xff1a;Mybatis一对多查询&#xff0c;分页显示问题解决方案_mybatis一对多分页问题-CSDN博客 在我们的开发中也许是遇到最多的功能&#xff0c;一张表的分页&#xff0c;多张表一对一功能的分页相信大家写来都是得心应手&#xff0c;但是在一对多分页查询的时候大家…

【Ubuntu18.04】激光雷达与相机联合标定(Livox+HIKROBOT)(一)相机内参标定

LivoxHIKROBOT联合标定——相机内参标定 引言1 海康机器人HIKROBOT SDK二次开发并封装ROS1.1 介绍1.2 安装MVS SDK1.3 封装ROS packge 2 览沃Livox SDK二次开发并封装ROS3 相机雷达联合标定——相机内参标定3.1 环境配置3.1.1 安装依赖——PCL 安装3.1.2 安装依赖——Eigen 安装…

【表面缺陷检测】钢轨表面缺陷检测数据集介绍(2类,含xml标签文件)

一、介绍 钢轨表面缺陷检测是指通过使用各种技术手段和设备&#xff0c;对钢轨表面进行检查和测量&#xff0c;以确定是否存在裂纹、掉块、剥离、锈蚀等缺陷的过程。这些缺陷可能会对铁路运输的安全和稳定性产生影响&#xff0c;因此及时进行检测和修复非常重要。钢轨表面缺陷…

GaussDB SQL基础语法示例-BOOLEAN表达式

目录 一、前言 二、GaussDB SQL 中的BOOLEAN表达式介绍 1、概念 2、组成 3、语法示例 三、在GaussDB SQL中的基础应用 1、示例1&#xff0c;使用比较运算符 2、示例2&#xff0c;使用逻辑运算符 3、示例3&#xff0c;使用IS NOT NULL运算符 4、示例4&#xff0c;使用…

vscode安装包下载——vscode的下载速度慢问题两种解决方法

1.vscode下载&#xff1a; 1.首先我们去官网下载vccode&#xff0c;下载过程非常慢&#xff1a; 官网链接&#xff1a; https://code.visualstudio.com/ 2.解决办法1 这是因为国外镜像地址下载慢的原因&#xff0c;此时需要去国内镜像地址进行下载&#xff0c;复制下载链接&…

【Andriod】使用adb命令安装和卸载apk的通用python脚本

文章目录 1.前言2.连接设备3.从本机通过adb安装apk4.从本机通过adb卸载apk 1.前言 如不会使用adb请看之前的文章 【Andriod】adb调试安卓手机时连接真机或模拟器的3种方法&#xff0c;你知道么&#xff1f; 2.连接设备 import os # python标准库中的os模块""&qu…

互动直播UI设置 之 主播UI

目录 一、普通模式下&#xff0c;布局选项 1、布局按钮 1&#xff09;、点击布局按钮 2&#xff09;、选择哪种布局后&#xff0c;主进程通过WM_COPYDATA 发送信息 2、duilib样式布局文件 1&#xff09;、主画面 2&#xff09;、连麦者画面 3、主画面自动调整宽度 1&a…

UnrealSynth - 基于虚幻引擎的YOLO合成数据生成器

UnrealSynth虚幻合成数据生成器利用虚幻引擎的实时渲染能力搭建逼真的三维场景&#xff0c;为YOLO等AI模型的训练提供自动生成的图像和标注数据&#xff0c;官方下载地址&#xff1a;UnrealSynth虚幻合成数据生成器。 UnrealSynth生成的合成数据可用于深度学习模型的训练和验证…

18.3 NPCAP 构建中间人攻击

ARP欺骗&#xff08;ARP Spoofing&#xff09;是一种网络攻击手段&#xff0c;其目的是通过欺骗目标主机来实现网络攻击。ARP协议是一种用于获取MAC地址的协议&#xff0c;因此欺骗者可以使用ARP欺骗来迫使其目标主机将网络流量发送到攻击者控制的设备上&#xff0c;从而实现网…

error LNK2019: 无法解析的外部符号

文章目录 1 问题2 出现该问题的原因和解决方法2.1 原因&#xff1a;2.3 解决方法&#xff1a;需要查看一下项目的属性配置是否正确&#xff1a; 3 其他可能得原因&#xff0c;但是本项目中没有出现 1 问题 在测试base64代码的时候&#xff0c;VS2022提示我错误如下&#xff1a…

Julia数值计算初步

文章目录 复数系统运算符三角函数指数、对数、取整 Julia系列&#xff1a;编程初步&#x1f525;数组 Julia作为主打数值计算的编程语言&#xff0c;对一些常用的计算函数提供了非常细致的支持&#xff0c;十分人性化&#xff0c;体验之后爱不释手。 复数系统 在Juli中&…

笔记本怎么录屏?这3个方法请你收好

在现代教育、工作和演示中&#xff0c;屏幕录制成为了无可替代的工具。它使我们能够捕捉电脑屏幕上的一切&#xff0c;从PPT演示到教程制作&#xff0c;再到技术支持。因此&#xff0c;选择合适的录屏工具显得尤为重要。本文将详细介绍笔记本怎么录屏的3个方法&#xff0c;这些…

软件绘制 硬件加速绘制 【DisplayList RenderNode】

Android4.0以后&#xff0c;系统默认开启硬件加速来渲染视图 异同点 共同点 两者都是从SF获取一块内存&#xff0c;绘制都是在APP端&#xff0c;绘制好后都是通知SF去进行合成图层 真正的区别 真正的区别&#xff1a;绘制是通过CPU还是GPU完成的视图绘制。 对应区别在代码中的体…

SpringBoot整合Gateway 的Demo(附源码)

源码&#xff0c;可直接下载 Gateway模块 Gateway 的父pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:sc…

学习嵌入式可以胜任哪一些行业?

今日话题&#xff0c;学习嵌入式可以胜任哪一些行业&#xff1f;学习嵌入式开发可以胜任许多行业&#xff0c;因为嵌入式技术在各个领域都有广泛的应用。嵌入式系统用于医疗设备、患者监测系统、药物分发设备等。智能手机、智能家居设备、游戏机等消费电子产品都包含嵌入式系统…

RocketMQ mmap原理和使用

传统文件IO 普通的IO操作的一个弊端&#xff0c;必然涉及到两次数据拷贝操作&#xff0c;对磁盘读写性能是有影响的。 那么如果我们要将一些数据写入到磁盘文件里去呢&#xff1f; 那这个就是一样的过程了&#xff0c;必须先把数据写入到用户进程空间里去&#xff0c;然后从这里…