objParam := { "api": "" , "v": "3" , "1000088": ["D:\your\file\path"] } CreateFormData(Data, hdr_ContentType, objParam) WinHttp := ComObjCreate("MSXML2.XMLHTTP.6.0") WinHttp.Open("POST", "TheURLlinkHere", false) WinHttp.SetRequestHeader("Content-Type", hdr_ContentType) WinHttp.SetRequestHeader("Authorization", "Basic " API_Key) WinHttp.Send(Data) MsgBox % WinHttp.ResponseText Return ; 详细说明:https://www.autohotkey.com/boards/viewtopic.php?p=289822#p289822 ; CreateFormData() by tmplinshi, AHK Topic: https://autohotkey.com/boards/viewtopic.php?t=7647 ; Thanks to Coco: https://autohotkey.com/boards/viewtopic.php?p=41731#p41731 ; Modified version by SKAN, 09/May/2016 CreateFormData(ByRef retData, ByRef retHeader, objParam) { New CreateFormData(retData, retHeader, objParam) } Class CreateFormData { __New(ByRef retData, ByRef retHeader, objParam) { Local CRLF := "`r`n", i, k, v, str, pvData ; Create a random Boundary Local Boundary := this.RandomBoundary() Local BoundaryLine := "------------------------------" . Boundary this.Len := 0 ; GMEM_ZEROINIT|GMEM_FIXED = 0x40 this.Ptr := DllCall( "GlobalAlloc", "UInt",0x40, "UInt",1, "Ptr" ) ; allocate global memory ; Loop input paramters For k, v in objParam { If IsObject(v) { For i, FileName in v { str := BoundaryLine . CRLF . "Content-Disposition: form-data; name=""" . k . """; filename=""" . FileName . """" . CRLF . "Content-Type: " . this.MimeType(FileName) . CRLF . CRLF this.StrPutUTF8( str ) this.LoadFromFile( Filename ) this.StrPutUTF8( CRLF ) } } Else { str := BoundaryLine . CRLF . "Content-Disposition: form-data; name=""" . k """" . CRLF . CRLF . v . CRLF this.StrPutUTF8( str ) } } this.StrPutUTF8( BoundaryLine . "--" . CRLF ) ; Create a bytearray and copy data in to it. retData := ComObjArray( 0x11, this.Len ) ; Create SAFEARRAY = VT_ARRAY|VT_UI1 pvData := NumGet( ComObjValue( retData ) + 8 + A_PtrSize ) DllCall( "RtlMoveMemory", "Ptr",pvData, "Ptr",this.Ptr, "Ptr",this.Len ) this.Ptr := DllCall( "GlobalFree", "Ptr",this.Ptr, "Ptr" ) ; free global memory retHeader := "multipart/form-data; boundary=----------------------------" . Boundary } StrPutUTF8( str ) { Local ReqSz := StrPut( str, "utf-8" ) - 1 this.Len += ReqSz ; GMEM_ZEROINIT|GMEM_MOVEABLE = 0x42 this.Ptr := DllCall( "GlobalReAlloc", "Ptr",this.Ptr, "UInt",this.len + 1, "UInt", 0x42 ) StrPut( str, this.Ptr + this.len - ReqSz, ReqSz, "utf-8" ) } LoadFromFile( Filename ) { Local objFile := FileOpen( FileName, "r" ) this.Len += objFile.Length ; GMEM_ZEROINIT|GMEM_MOVEABLE = 0x42 this.Ptr := DllCall( "GlobalReAlloc", "Ptr",this.Ptr, "UInt",this.len, "UInt", 0x42 ) objFile.RawRead( this.Ptr + this.Len - objFile.length, objFile.length ) objFile.Close() } RandomBoundary() { str := "0|1|2|3|4|5|6|7|8|9|a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z" Sort, str, D| Random str := StrReplace(str, "|") Return SubStr(str, 1, 12) } MimeType(FileName) { n := FileOpen(FileName, "r").ReadUInt() Return (n = 0x474E5089) ? "image/png" : (n = 0x38464947) ? "image/gif" : (n&0xFFFF = 0x4D42 ) ? "image/bmp" : (n&0xFFFF = 0xD8FF ) ? "image/jpeg" : (n&0xFFFF = 0x4949 ) ? "image/tiff" : (n&0xFFFF = 0x4D4D ) ? "image/tiff" : "application/octet-stream" } }
声明:站内资源为整理优化好的代码上传分享与学习研究,如果是开源代码基本都会标明出处,方便大家扩展学习路径。请不要恶意搬运,破坏站长辛苦整理维护的劳动成果。本站为爱好者分享站点,所有内容不作为商业行为。如若本站上传内容侵犯了原著者的合法权益,请联系我们进行删除下架。
评论(0)