1 (изменено: Malcev, 2018-04-11 11:15:24)

Тема: AHK: Заливка файлов на failiem.lv

Размер файлов до 2 гигов.

path := "D:\test.mp4"

ComObjError(false)
HTTP := ComObjCreate("WinHTTP.WinHTTPRequest.5.1")
HTTP.Open("GET", "https://failiem.lv", true)
HTTP.SetRequestHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko)")
HTTP.SetRequestHeader("Pragma", "no-cache")
HTTP.SetRequestHeader("Cache-Control", "no-cache, no-store")
HTTP.SetRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT")
HTTP.Send()
HTTP.WaitForResponse()
RegexMatch(HTTP.ResponseText, "s)PHPSESSID=(.+?)"".+?strCurrentUploadCallServer = '(.+?)\.", match)
phpsessid := match1, server := match2

HTTP.Open("GET", "https://failiem.lv/server_scripts/get_upload_id.php?show_add_key=1", true)
HTTP.SetRequestHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko)")
HTTP.SetRequestHeader("Pragma", "no-cache")
HTTP.SetRequestHeader("Cache-Control", "no-cache, no-store")
HTTP.SetRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT")
HTTP.Send()
HTTP.WaitForResponse()
RegexMatch(HTTP.ResponseText, "s)(.+?),.+?,(.+?)$", match)
up_id := match1, key := match2

now := A_NowUTC
EnvSub, now,1970, seconds
now .= A_MSec
objParam := {file: [path]}
CreateFormData(PostData, hdr_ContentType, objParam)

HTTP.SetTimeouts(0, 0, 0, 0)
HTTP.Open("POST", "https://" server ".failiem.lv/save_file.php?PHPSESSID=" phpsessid "&up_id=" up_id "&ignore_user_abort=1&skip_update=1&key=" key "&v=" now, true)
HTTP.SetRequestHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko)")
HTTP.SetRequestHeader("Content-Type", hdr_ContentType)
HTTP.SetRequestHeader("Pragma", "no-cache")
HTTP.SetRequestHeader("Cache-Control", "no-cache, no-store")
HTTP.SetRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT")
HTTP.Send(PostData)
HTTP.WaitForResponse()
uploadedLink := "https://failiem.lv/u/" up_id

; проверка загрузки
HTTP.SetTimeouts(0, 60000, 30000, 30000)
HTTP.Open("GET", uploadedLink, true)
HTTP.SetRequestHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko)")
HTTP.SetRequestHeader("Pragma", "no-cache")
HTTP.SetRequestHeader("Cache-Control", "no-cache, no-store")
HTTP.SetRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT")
HTTP.Send()
HTTP.WaitForResponse()
if InStr(HTTP.ResponseText, "tools_button_download")
   msgbox % clipboard := uploadedLink
else
   msgbox Error
return


; 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"
	}

}

2

Re: AHK: Заливка файлов на failiem.lv

А как можно было бы передать файлы через аккаунт?

3

Re: AHK: Заливка файлов на failiem.lv

Нужно посмотреть, что отправляется на сервер и повторить это в скрипте.

4

Re: AHK: Заливка файлов на failiem.lv

Malcev, Не имею понятия как это можно осуществить.. Не могли бы вы помочь?

5 (изменено: Malcev, 2018-04-07 23:19:42)

Re: AHK: Заливка файлов на failiem.lv

Например так:
Заходите в IE, нажимаете f12, выбираете вкладку Network, смотрите  чтобы все кнопки были отжаты.
Нажимаете на запись, заходите на failiem.lv и загружаете какой-либо файл.
Как закончили загружать, смотрите, что вы отправляете серверу (POST запросы), начиная с конца.
После чего вбиваете в поиск отправленные данные, чтобы понять откуда вы их получаете.
Например, в данном примере сам файл отправляется следующим запросом:
https://fv8.failiem.lv/save_file.php?PHPSESSID=bdlel0j7r98eh6212l49svrld6&up_id=9sas8ppk&ignore_user_abort=1&skip_update=1&key=27ae0&v=1523127008906
Вбиваете в поиск "fv8" смотрите, что вы его можете получить в BODY при получении GET запроса на failiem.lv.

var upload_save_server = strProtocol + 'fv8.failiem.lv';

    var arrFallbackHosts = [ 'pro1.failiem.lv', 'fv8.failiem.lv' ];
    var intCurrentFallbackHost = 0;
    var strCurrentUploadCallServer = 'fv8.failiem.lv';

Так же и с остальными запросами.
В итоге можно будет прийты к выводу, что перед отправкой файла достаточно посетить 2 ссылки:
https://failiem.lv
https://failiem.lv/server_scripts/get_upload_id.php?show_add_key=1
Сам файл передаётся с помощью multipart/form-data.
Библиотеку я вставил в код.
Если хотите посмотреть POST DATA в multipart/form-data, то это можно сделать с помощью HttpWatch.
Я же в коде отправлял только сам файл.
Также иногда бывает нужным отправлять какие-либо заголовки (вкладка Request Headers) и кукисы.
Лично я отправляю всегда версию клиента и всевозможную защиту от получения ответа из кеша:

HTTP.SetRequestHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko)")
HTTP.SetRequestHeader("Pragma", "no-cache")
HTTP.SetRequestHeader("Cache-Control", "no-cache, no-store")
HTTP.SetRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT")

При POST запросах (отправки текстовых данных) нужно еще вставлять:

HTTP.SetRequestHeader("Content-Type", "application/x-www-form-urlencoded")

6 (изменено: DD, 2018-04-10 18:33:17)

Re: AHK: Заливка файлов на failiem.lv

7 (изменено: MirchikAhtung, 2018-04-15 21:55:49)

Re: AHK: Заливка файлов на failiem.lv

del