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 (изменено: DD, 2018-05-10 22:32:03)

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

Если можно, возник вопрос по инструкции Malcev'а: не удалось выяснить, как установить запрос для полных текстов комментариев к публикациям сайта, разворачиваемых по ссылке Read more ».

+ открыть спойлер

Обычно из curl-запроса можно было формировать рабочий запрос, но тут какой-то запутанный формат:

curl "https://vigilantcitizen.com/wp-admin/admin-ajax.php" -H "origin: https://vigilantcitizen.com" -H "accept-encoding: gzip, deflate, br" -H "x-requested-with: XMLHttpRequest" -H "accept-language: ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4" -H "user-agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.86 Safari/537.36" -H "content-type: multipart/form-data; boundary=----WebKitFormBoundaryXA6GZmN0QyektE42" -H "accept: */*" -H "referer: https://vigilantcitizen.com/moviesandtv/hide-and-seek-the-most-blatant-movie-about-monarch-mind-control-ever/" -H "authority: vigilantcitizen.com" -H "cookie: tk_or=^%^22^%^22; tk_r3d=^%^22^%^22; tk_lr=^%^22^%^22; _ga=GA1.2.1079624580.1525974707; _gid=GA1.2.580885602.1525974707; _gat=1" --data-binary ^"------WebKitFormBoundaryXA6GZmN0QyektE42^

Content-Disposition: form-data; name=^\^"action^\^"^

^

readMore^

------WebKitFormBoundaryXA6GZmN0QyektE42^

Content-Disposition: form-data; name=^\^"commentId^\^"^

^

283727^

------WebKitFormBoundaryXA6GZmN0QyektE42^

Content-Disposition: form-data; name=^\^"postId^\^"^

^

13388^

------WebKitFormBoundaryXA6GZmN0QyektE42--^

^" --compressed

8

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

А зачем вы смотрите через Curl.
Смотрите, что отправляете через IE.

HTTP := ComObjCreate("WinHTTP.WinHTTPRequest.5.1")
HTTP.Open("GET", "https://vigilantcitizen.com/moviesandtv/hide-and-seek-the-most-blatant-movie-about-monarch-mind-control-ever", 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)""wc_post_id"":(.+?),.+?<div id=""comment-(.+?)""", match)

Boundary := RandomBoundary()
data =
(
-----------------------------%Boundary%
Content-Disposition: form-data; name="action"

readMore
-----------------------------%Boundary%
Content-Disposition: form-data; name="commentId"

%match2%
-----------------------------%Boundary%
Content-Disposition: form-data; name="postId"

%match1%
-----------------------------%Boundary%--

)

HTTP.Open("POST", "https://vigilantcitizen.com/wp-admin/admin-ajax.php", 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.SetRequestHeader("Content-Type", "multipart/form-data; boundary=---------------------------" Boundary)
HTTP.Send(data)
HTTP.WaitForResponse()
msgbox % HTTP.ResponseText


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)
}
+ DD