Тема: AHK: Заливка файлов на failiem.lv
Тема для обсуждения "Заливка файлов на failiem.lv".
http://forum.script-coding.com/viewtopic.php?id=17681
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Тема для обсуждения "Заливка файлов на failiem.lv".
http://forum.script-coding.com/viewtopic.php?id=17681
А как можно было бы передать файлы через аккаунт?
Нужно посмотреть, что отправляется на сервер и повторить это в скрипте.
Malcev, Не имею понятия как это можно осуществить.. Не могли бы вы помочь?
Например так:
Заходите в 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")
Если можно, возник вопрос по инструкции 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
А зачем вы смотрите через 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)
}
А как можно было бы передать файлы через аккаунт?
path := "D:\test.mp4"
login := "login"
password := "password"
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=(.+?)""", match)
phpsessid := match1
HTTP.Open("POST", "https://failiem.lv/ajax/sign_in.php?PHPSESSID=" phpsessid, 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", "application/x-www-form-urlencoded; charset=UTF-8")
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("add_cookie_uploads=false&from_ico=0&password=" password "&recaptcha_response=&signin=true&username=" login)
HTTP.WaitForResponse()
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://free.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"
}
}
А вообще там АПИ имеется:
https://ru.files.fm/api
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться