В течение последней недели я пытался понять, как загружать файлы на Cerberus FTP через HTTP-запрос, но я продолжаю получать тот же ответ от сервера.
Если я изменяю contentype на что-то другое, он завершается с ошибкой проверки CSRF.
Есть идеи?
Кажется, это проблема форматирования, но я не могу понять, где. В WinDiff запрос слегка отключен, потому что после атрибута Cookie есть дополнительный пробел. Должен ли этот тип запроса быть на 100% точным с точки зрения пробелов и тому подобного?
В Fiddler запросы выглядят одинаково.
Дайте мне знать, если требуется скрипт загрузки веб-сайта, форма не позволила мне загрузить весь скрипт.
"
Response:
HTTP/1.1 200 Ok
Server: CerberusFTPServer/9.0
X-Frame-Options: SAMEORIGIN
X-Content-Type-Options: nosniff
X-XSS-Protection: 1
Content-Security-Policy: frame-ancestors 'self'
Referrer-Policy: same-origin
Cache-Control: no-cache, private, must-revalidate
Content-Type: application/json; charset=utf-8
Set-Cookie: cftpSID=w6QPdMOWDsO_wq-Dsw-Cj8KSw57CjwjDlQnDvistBw; Path=/; HttpOnly;
Date: Tue, 15 Jan 2019 09:22:24 GMT
Content-Length: 126
{"files":[{"delete_type":"","delete_url":"","error":"Form data not complete","name":"","size":0,"thumbnail_url":"","url":""}]}"
#upload
$file = "C:\Users\michael\Desktop\1024000.txt"
$fileName = Split-Path $File
$boundary = [guid]::NewGuid().ToString()
$fileBinary = [System.IO.File]::ReadAllBytes($File)
$enc = [System.Text.Encoding]::GetEncoding("iso-8859-1")
$fileEncoded = $enc.GetString($fileBinary)
$Uri='http://172.16.0.82/file/upload'
$ContentType = "text/plain"
$boundary = "-----------------------------7e3a63120b435"
$FNAME = "1024000.txt"
$FileContent= $fileEncoded
$template = @'
{5}
{0}
Content-Disposition: form-data; name="cd"
/
{0}
Content-Disposition: form-data; name="csrftoken"
{4}
{0}
Content-Disposition: form-data; name="files[]"; filename="{1}"
Content-Type: {2}
{3}
{0}--
'@
$conn = "Connection: Keep-Alive"
$body = $template -f $boundary, $FNAME, $ContentType, $FileContent, $csrftoken, $conn
$ConType="multipart/form-data; boundary="+$boundary
$header=@{
'X-Requested-With'='XMLHttpRequest'
'Accept-Encoding'= 'gzip, deflate'
'Referer'='http://172.16.0.82/file'
'Content-Type'= "$ConType"
'Accept'='application/json, text/javascript, */*; q=0.01'
'Pragma'='no-cache'
'User-Agent' = 'Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko'
'Host' = '172.16.0.82'
'Accept-Language' = 'en-DK,en-GB;q=0.8,en-US;q=0.6,en;q=0.4,da;q=0.2'
}
Invoke-webrequest -Uri $Uri -Method POST -Body $body -Headers $header -websession $session