lich0821 / wcf-client-rust

A Rust client for WeChatFerry.
131 stars 30 forks source link

保存图片接口的一些疑问 #10

Closed x7yue closed 4 months ago

x7yue commented 4 months ago

你好,我在使用 save-image 时发现这个调用会很慢才会返回。 查看源码发现源码内先调用了 DOWNLOAD_ATTACH 然后再调用 DECRYPT_IMAGE 。 但是在 wcf.exe 日志中,发现 [2024-05-08 11:28:38.530] [debug] [WCF] [funcs.cpp::242::DownloadAttach] path: xxx.dat 这个日志中保存的 .dat 文件其实就是图片文件, 修改后缀之后就是原图。所以是否可以不用 DECRYPT_IMAGE

rustsave_image 方法中 decrypt_image 超时逻辑的实现是通过 loop

 loop {
        if counter >= msg.timeout {
            break;
        }
        match wc.clone().decrypt_image(DecPath {
            src: msg.extra.clone(),
            dst: msg.dir.clone(),
        }) {
            Ok(path) => {
                if path.is_empty() {
                    counter += 1;
                    sleep(Duration::from_secs(1));
                    continue;
                }
                return Ok(warp::reply::json(&ApiResponse {
                    status: 0,
                    error: None,
                    data: Some(path),
                }));
            }
            Err(error) => return handle_error(&error.to_string()),
        };
    }

其实 loop 逻辑中会多次调用 decrypt_image 可能会导致多次解密。

x7yue commented 4 months ago

你好,我在使用 save-image 时发现这个调用会很慢才会返回。 查看源码发现源码内先调用了 DOWNLOAD_ATTACH 然后再调用 DECRYPT_IMAGE 。 但是在 wcf.exe 日志中,发现 [2024-05-08 11:28:38.530] [debug] [WCF] [funcs.cpp::242::DownloadAttach] path: xxx.dat 这个日志中保存的 .dat 文件其实就是图片文件, 修改后缀之后就是原图。所以是否可以不用 DECRYPT_IMAGE

rustsave_image 方法中 decrypt_image 超时逻辑的实现是通过 loop

 loop {
        if counter >= msg.timeout {
            break;
        }
        match wc.clone().decrypt_image(DecPath {
            src: msg.extra.clone(),
            dst: msg.dir.clone(),
        }) {
            Ok(path) => {
                if path.is_empty() {
                    counter += 1;
                    sleep(Duration::from_secs(1));
                    continue;
                }
                return Ok(warp::reply::json(&ApiResponse {
                    status: 0,
                    error: None,
                    data: Some(path),
                }));
            }
            Err(error) => return handle_error(&error.to_string()),
        };
    }

其实 loop 逻辑中会多次调用 decrypt_image 可能会导致多次解密。

测试发现是因为我请求的是 localhost 改成 127.0.0.1 会变快。顺便测试了不解密图片的 dat 文件确实可以使用。

lich0821 commented 4 months ago

你好,我在使用 save-image 时发现这个调用会很慢才会返回。 查看源码发现源码内先调用了 DOWNLOAD_ATTACH 然后再调用 DECRYPT_IMAGE 。 但是在 wcf.exe 日志中,发现 [2024-05-08 11:28:38.530] [debug] [WCF] [funcs.cpp::242::DownloadAttach] path: xxx.dat 这个日志中保存的 .dat 文件其实就是图片文件, 修改后缀之后就是原图。所以是否可以不用 DECRYPT_IMAGE 。 在 rustsave_image 方法中 decrypt_image 超时逻辑的实现是通过 loop

 loop {
        if counter >= msg.timeout {
            break;
        }
        match wc.clone().decrypt_image(DecPath {
            src: msg.extra.clone(),
            dst: msg.dir.clone(),
        }) {
            Ok(path) => {
                if path.is_empty() {
                    counter += 1;
                    sleep(Duration::from_secs(1));
                    continue;
                }
                return Ok(warp::reply::json(&ApiResponse {
                    status: 0,
                    error: None,
                    data: Some(path),
                }));
            }
            Err(error) => return handle_error(&error.to_string()),
        };
    }

其实 loop 逻辑中会多次调用 decrypt_image 可能会导致多次解密。

测试发现是因为我请求的是 localhost 改成 127.0.0.1 会变快。顺便测试了不解密图片的 dat 文件确实可以使用。

可以使用指的是可以直接打开查看吗?

x7yue commented 4 months ago

你好,我在使用 save-image 时发现这个调用会很慢才会返回。 查看源码发现源码内先调用了 DOWNLOAD_ATTACH 然后再调用 DECRYPT_IMAGE 。 但是在 wcf.exe 日志中,发现 [2024-05-08 11:28:38.530] [debug] [WCF] [funcs.cpp::242::DownloadAttach] path: xxx.dat 这个日志中保存的 .dat 文件其实就是图片文件, 修改后缀之后就是原图。所以是否可以不用 DECRYPT_IMAGE 。 在 rustsave_image 方法中 decrypt_image 超时逻辑的实现是通过 loop

 loop {
        if counter >= msg.timeout {
            break;
        }
        match wc.clone().decrypt_image(DecPath {
            src: msg.extra.clone(),
            dst: msg.dir.clone(),
        }) {
            Ok(path) => {
                if path.is_empty() {
                    counter += 1;
                    sleep(Duration::from_secs(1));
                    continue;
                }
                return Ok(warp::reply::json(&ApiResponse {
                    status: 0,
                    error: None,
                    data: Some(path),
                }));
            }
            Err(error) => return handle_error(&error.to_string()),
        };
    }

其实 loop 逻辑中会多次调用 decrypt_image 可能会导致多次解密。

测试发现是因为我请求的是 localhost 改成 127.0.0.1 会变快。顺便测试了不解密图片的 dat 文件确实可以使用。

可以使用指的是可以直接打开查看吗?

对,改后缀名就可以直接查看了

lich0821 commented 4 months ago

虽然有点儿不可思议,但能用就行。