VBS模拟POST上传文件的代码
来源: 阅读:1781 次 日期:2016-07-07 15:07:50
温馨提示: 小编为您整理了“VBS模拟POST上传文件的代码”,方便广大网友查阅!

改写自CSDN上的一个ASP中模拟form上传文件,即(multipart/form-data)的表单的程序,原程序有些地方写错了。

代码如下:

'XML Upload Class

Class XMLUpload

Private xmlHttp

Private objTemp

Private adTypeBinary, adTypeText

Private strCharset, strBoundary

Private Sub Class_Initialize()

adTypeBinary = 1

adTypeText = 2

Set xmlHttp = CreateObject("Msxml2.XMLHTTP")

Set objTemp = CreateObject("ADODB.Stream")

objTemp.Type = adTypeBinary

objTemp.Open

strCharset = "utf-8"

strBoundary = GetBoundary()

End Sub

Private Sub Class_Terminate()

objTemp.Close

Set objTemp = Nothing

Set xmlHttp = Nothing

End Sub

'指定字符集的字符串转字节数组

Public Function StringToBytes(ByVal strData, ByVal strCharset)

Dim objFile

Set objFile = CreateObject("ADODB.Stream")

objFile.Type = adTypeText

objFile.Charset = strCharset

objFile.Open

objFile.WriteText strData

objFile.Position = 0

objFile.Type = adTypeBinary

If UCase(strCharset) = "UNICODE" Then

objFile.Position = 2 'delete UNICODE BOM

ElseIf UCase(strCharset) = "UTF-8" Then

objFile.Position = 3 'delete UTF-8 BOM

End If

StringToBytes = objFile.Read(-1)

objFile.Close

Set objFile = Nothing

End Function

'获取文件内容的字节数组

Private Function GetFileBinary(ByVal strPath)

Dim objFile

Set objFile = CreateObject("ADODB.Stream")

objFile.Type = adTypeBinary

objFile.Open

objFile.LoadFromFile strPath

GetFileBinary = objFile.Read(-1)

objFile.Close

Set objFile = Nothing

End Function

'获取自定义的表单数据分界线

Private Function GetBoundary()

Dim ret(12)

Dim table

Dim i

table = "abcdefghijklmnopqrstuvwxzy0123456789"

Randomize

For i = 0 To UBound(ret)

ret(i) = Mid(table, Int(Rnd() * Len(table) + 1), 1)

Next

GetBoundary = "---------------------------" & Join(ret, Empty)

End Function

'设置上传使用的字符集

Public Property Let Charset(ByVal strValue)

strCharset = strValue

End Property

'添加文本域的名称和值

Public Sub AddForm(ByVal strName, ByVal strValue)

Dim tmp

tmp = "\r\n--$1\r\nContent-Disposition: form-data; name=""$2""\r\n\r\n$3"

tmp = Replace(tmp, "\r\n", vbCrLf)

tmp = Replace(tmp, "$1", strBoundary)

tmp = Replace(tmp, "$2", strName)

tmp = Replace(tmp, "$3", strValue)

objTemp.Write StringToBytes(tmp, strCharset)

End Sub

'设置文件域的名称/文件名称/文件MIME类型/文件路径或文件字节数组

Public Sub AddFile(ByVal strName, ByVal strFileName, ByVal strFileType, ByVal strFilePath)

Dim tmp

tmp = "\r\n--$1\r\nContent-Disposition: form-data; name=""$2""; filename=""$3""\r\nContent-Type: $4\r\n\r\n"

tmp = Replace(tmp, "\r\n", vbCrLf)

tmp = Replace(tmp, "$1", strBoundary)

tmp = Replace(tmp, "$2", strName)

tmp = Replace(tmp, "$3", strFileName)

tmp = Replace(tmp, "$4", strFileType)

objTemp.Write StringToBytes(tmp, strCharset)

objTemp.Write GetFileBinary(strFilePath)

End Sub

'设置multipart/form-data结束标记

Private Sub AddEnd()

Dim tmp

tmp = "\r\n--$1--\r\n"

tmp = Replace(tmp, "\r\n", vbCrLf)

tmp = Replace(tmp, "$1", strBoundary)

objTemp.Write StringToBytes(tmp, strCharset)

objTemp.Position = 2

End Sub

'上传到指定的URL,并返回服务器应答

Public Function Upload(ByVal strURL)

Call AddEnd

xmlHttp.Open "POST", strURL, False

xmlHttp.setRequestHeader "Content-Type", "multipart/form-data; boundary=" & strBoundary

'xmlHttp.setRequestHeader "Content-Length", objTemp.size

xmlHttp.Send objTemp

Upload = xmlHttp.responseText

End Function

End Class

Dim UploadData

Set UploadData = New XMLUpload

UploadData.Charset = "utf-8"

UploadData.AddForm "content", "Hello world" '文本域的名称和内容

UploadData.AddFile "file", "test.jpg", "image/jpg", "test.jpg"

WScript.Echo UploadData.Upload("http://example.com/takeupload.php")

Set UploadData = Nothing

更多信息请查看脚本栏目
由于各方面情况的不断调整与变化, 提供的所有考试信息和咨询回复仅供参考,敬请考生以权威部门公布的正式信息和咨询为准!

2025国考·省考课程试听报名

  • 报班类型
  • 姓名
  • 手机号
  • 验证码
关于我们 | 联系我们 | 人才招聘 | 网站声明 | 网站帮助 | 非正式的简要咨询 | 简要咨询须知 | 加入群交流 | 手机站点 | 投诉建议
工业和信息化部备案号:滇ICP备2023014141号-1 云南省教育厅备案号:云教ICP备0901021 滇公网安备53010202001879号 人力资源服务许可证:(云)人服证字(2023)第0102001523号
云南网警备案专用图标
联系电话:0871-65317125(9:00—18:00) 获取招聘考试信息及咨询关注公众号:
咨询QQ:526150442(9:00—18:00)版权所有:
云南网警报警专用图标
Baidu
map