找回密码  加入

AUTOIT CN

搜索
查看: 344|回复: 35

[网络通信] [求助]文件以二进制形式保存插入

[复制链接]
发表于 2019-8-13 13:46:04 | 显示全部楼层 |阅读模式
50金钱
本帖最后由 king8462 于 2019-8-13 13:47 编辑

想借用下面的易语言代码用于post提交数据:
字节集数据 = 读入文件 (FilePath)
data = 到字节集 (#POST_UP)
data = 子字节集替换 (data, 到字节集 (“[guid]”), 到字节集 (guid), , )
data = 子字节集替换 (data, 到字节集 (“[pz]”), 到字节集 (pz), , )
data = 子字节集替换 (data, 到字节集 (“[文件名]”), 到字节集 (文本_取右边 (FilePath, “\”)), , )
data = 子字节集替换 (data, 到字节集 (“[时间]”), 到字节集 (V8取标准时间 ()), , )
data = 子字节集替换 (data, 到字节集 (“[文本数据]”), 字节集数据, , )
http.Open (“POST”, “url”)
http.SendBin (到字节集 (data), 真)


但运行下面的au3代码把exe文件插入进去后发现exe文件大小改变了,而且post后exe无法打开。不知道哪里出错了,请高手帮忙修改一下。附件为guid.txt文件
  1.    
  2.    $guid="wu_1di4a1i7l1mmru1n1udfp807l90"
  3.    $pz="SF5Rc8mkQQacKUKxYK/ao8coslHrvh7dthxXFuoln40OXxqTtYb9OclvqFqgBC1z"
  4.    $date="Tue Aug 13 2019 09:39:08 GMT 0800 (中国标准时间)"
  5.    
  6.    Local $file = @ScriptDir & "\guid.txt"
  7.    $sfile=FileOpen($file)
  8.    Local $chars = FileRead($sfile)
  9.    $chars = StringReplace($chars,"[guid]",$guid)
  10.    $chars = StringReplace($chars,"[pz]",$pz)
  11.    $chars = StringReplace($chars,"[文件名]","exe测试文件.exe")
  12.    $chars = StringReplace($chars,"[时间]",$date)
  13.    
  14.   $scwj=FileOpen(@ScriptDir&"\exe测试文件.exe")
  15.   $sText= FileRead($scwj)
  16.   FileClose(@ScriptDir&"\exe测试文件.exe")        
  17.   $chars = StringReplace($chars,"[文本数据]",$sText)
  18.    FileWrite(FileOpen($file,2),$chars)
  19.    FileClose($file)

  20. $file=FileOpen($file,16)
  21. $data=FileRead($file)
  22.   
  23. ;以下post代码部分省略  
  24. $httpObj.Open ("POST", "url")
  25. $httpObj.Send($data)
  26. $httpObj.WaitForResponse()  
复制代码




附件: 您需要 登录 才可以下载或查看,没有帐号?加入

最佳答案

查看完整内容

感觉被楼主带偏了,Au3 本身就可以完成全套的 Post 不说,就光当前的这个问题而言,就不应该替换完成后写入txt文本文档再读取,这样二进制文件的数据肯定已经损坏。应该直接二进制替换,然后直接Post: 这样应该OK! 没有测试,但感觉必须能成,不行来战
发表于 2019-8-13 13:46:05 | 显示全部楼层
本帖最后由 afan 于 2019-8-14 00:19 编辑

感觉被楼主带偏了,Au3 本身就可以完成全套的 Post 不说,就光当前的这个问题而言,就不应该替换完成后写入txt文本文档再读取,这样二进制文件的数据肯定已经损坏。应该直接二进制替换,然后直接Post:
  1. $guid = "wu_1di4a1i7l1mmru1n1udfp807l90"
  2. $pz = "SF5Rc8mkQQacKUKxYK/ao8coslHrvh7dthxXFuoln40OXxqTtYb9OclvqFqgBC1z"
  3. $date = "Tue Aug 13 2019 09:39:08 GMT 0800 (中国标准时间)"

  4. Local $file = @ScriptDir & "\guid.txt"
  5. Local $chars = FileRead($file)
  6. $chars = StringReplace($chars, "[guid]", $guid)
  7. $chars = StringReplace($chars, "[pz]", $pz)
  8. $chars = StringReplace($chars, "[文件名]", "exe测试文件.exe")
  9. $chars = StringReplace($chars, "[时间]", $date)
  10. $scwj = FileOpen(@ScriptDir & "\exe测试文件.exe", 16)
  11. $sText = StringTrimLeft(FileRead($scwj), 2)
  12. FileClose($scwj)
  13. $chars = StringToBinary($chars)
  14. $chars = StringReplace($chars, "5BCEC4B1BECAFDBEDD5D", $sText)
  15. $data = $chars  ;这里直接就可以拿去Post,不需要经过任何的读写操作
复制代码


这样应该OK!  没有测试,但感觉必须能成,不行来战
回复

使用道具 举报

发表于 2019-8-13 16:37:22 | 显示全部楼层
不知道是不是这个意思,没法测试
  1. $guid = "wu_1di4a1i7l1mmru1n1udfp807l90"
  2. $pz = "SF5Rc8mkQQacKUKxYK/ao8coslHrvh7dthxXFuoln40OXxqTtYb9OclvqFqgBC1z"
  3. $date = "Tue Aug 13 2019 09:39:08 GMT 0800 (中国标准时间)"

  4. Local $file = @ScriptDir & "\guid.txt"
  5. ;~ $sfile = FileOpen($file)
  6. Local $chars = FileRead($file)
  7. $chars = StringReplace($chars, "[guid]", $guid)
  8. $chars = StringReplace($chars, "[pz]", $pz)
  9. $chars = StringReplace($chars, "[文件名]", "exe测试文件.exe")
  10. $chars = StringReplace($chars, "[时间]", $date)

  11. $scwj = FileOpen(@ScriptDir & "\exe测试文件.exe", 16)
  12. $sText = FileRead($scwj)
  13. FileClose($scwj)
  14. $chars = StringReplace($chars, "[文本数据]", $sText)
  15. Local $hFo = FileOpen($file, 2 + 512)
  16. FileWrite($hFo, $chars)
  17. FileClose($hFo)

  18. $data = FileRead($file)
复制代码
回复

使用道具 举报

 楼主| 发表于 2019-8-13 18:02:08 | 显示全部楼层
本帖最后由 king8462 于 2019-8-15 19:05 编辑
afan 发表于 2019-8-13 16:37
不知道是不是这个意思,没法测试

谢谢A版回复,测试失败。附件是完整源码,密码发私信给你。
回复

使用道具 举报

发表于 2019-8-13 18:04:37 | 显示全部楼层
king8462 发表于 2019-8-13 18:02
谢谢A版回复,测试失败。附件是完整源码,密码发私信给你。

不看完整码,没时间搞,最多帮忙看看最简示例
回复

使用道具 举报

 楼主| 发表于 2019-8-13 18:07:29 | 显示全部楼层
afan 发表于 2019-8-13 18:04
不看完整码,没时间搞,最多帮忙看看最简示例

代码很短的。里面的文本上传测试成功
回复

使用道具 举报

发表于 2019-8-13 18:18:38 | 显示全部楼层
king8462 发表于 2019-8-13 18:07
代码很短的。里面的文本上传测试成功

随便看了下,你确定改了?
$scwj = FileOpen(@ScriptDir & "\exe测试文件.exe")

我上面的第13行
回复

使用道具 举报

 楼主| 发表于 2019-8-13 18:28:27 | 显示全部楼层
afan 发表于 2019-8-13 18:18
随便看了下,你确定改了?
$scwj = FileOpen(@ScriptDir & "\exe测试文件.exe")

改了,修改后的文件明显过大,应该800kb差不多。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?加入

x
回复

使用道具 举报

 楼主| 发表于 2019-8-13 18:32:48 | 显示全部楼层
$data = FileRead($file) 必须以$data = FileRead($file,16)字节形式读取,要不然post失败。
回复

使用道具 举报

发表于 2019-8-13 19:02:15 | 显示全部楼层
king8462 发表于 2019-8-13 18:32
$data = FileRead($file) 必须以$data = FileRead($file,16)字节形式读取,要不然post失败。

你这句是在代码不完整的情况下我改的,鬼知道后面是做什么用? 我改那句主要是看它上一句打开了文件而没有关闭的代码,直接 FileRead 可以不用打开。
回复

使用道具 举报

 楼主| 发表于 2019-8-13 20:06:45 | 显示全部楼层
afan 发表于 2019-8-13 19:02
你这句是在代码不完整的情况下我改的,鬼知道后面是做什么用? 我改那句主要是看它上一句打开了文件而没 ...

谢谢版主!我实在是不知道还能怎么改了
回复

使用道具 举报

发表于 2019-8-13 20:10:27 | 显示全部楼层
不知道服务端如何接收数据创建文件的,如果生成的文件有两倍大那就是当字符串而非二进制数据处理了
回复

使用道具 举报

 楼主| 发表于 2019-8-13 20:21:36 | 显示全部楼层
afan 发表于 2019-8-13 20:10
不知道服务端如何接收数据创建文件的,如果生成的文件有两倍大那就是当字符串而非二进制数据处理了

服务端应该就是把其他的数据裁剪掉,只保留exe读取的那部分。生成的文件应该是exe文件本身的大小加上guid.txt大小,现在生成的太大,肯定有问题 。我用易语言导出过修改后的$data数据,就是这样子的。
回复

使用道具 举报

发表于 2019-8-13 20:25:59 | 显示全部楼层
king8462 发表于 2019-8-13 20:21
服务端应该就是把其他的数据裁剪掉,只保留exe读取的那部分。生成的文件应该是exe文件本身的大小加上guid ...

我的意思是 现在的文件是否两倍大?……
回复

使用道具 举报

 楼主| 发表于 2019-8-13 20:29:20 | 显示全部楼层
afan 发表于 2019-8-13 20:25
我的意思是 现在的文件是否两倍大?……

是的,1.64mb,两倍了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|小黑屋|手机版|AUTOIT CN ( Autoit8.com )谷歌 百度

GMT+8, 2019-8-23 15:21 , Processed in 0.078125 second(s), 18 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表