Anmelden

Archiv verlassen und diese Seite im Standarddesign anzeigen : (PHP) - vivo.sx Upload via PHP



darkness
26.07.2017, 06:10
Hey,

ich würde gerne via PHP auf vivo.sx uploaden. Leider nutzen die anders als andere Seiten mit diesem Skript einen Flash Upload und die benötigten Daten die an den Upload Server geschickt werden stehen scheinbar nicht im Quelltext der Seite.

Hat jemand schon erfolgreich auf vivo.sx via Skript / C# / Java * hochgeladen und möchte mir verraten wie er das bewerkstelligt hat? Ich wäre sehr dankbar für Hilfe. :emoji08:

fritzi
26.07.2017, 08:47
Hochgeladne habe ich bei denen noch nichts aber du könntest doch via Entwicklertools schauen was für Daten gesendet werden, wen du damit nichts siehst ginge immernoch Wireshark(solange kein SSL) um da mal reinzusehen.

darkness
26.07.2017, 09:11
Hab ich mir angeguckt. Unter anderem sind da zwei Session Ids dabei aber ich weiß nicht woher die kommen. :/ Also woher der Flashupload die Daten nimmt ...

Nimbus
26.07.2017, 09:51
Prinzipiell müsste man diesen Flash Kram auch decompilen können. Ob man/du daraus schlau wird/wirst kann ich dir allerdings nicht sagen. Tendenziell wird das schnell unübersichtlich. Flash ist zwar sehr sehr weit verbreitet, aber eben nicht überall angekommen. Ich würde mal versuchen zu schauen, ob ein alternativer Upload existiert (kennt man ja von vielen Seiten).

Mögliche Ideen dazu:

schauen ob es irgendwo in den Einstellungen eine solche Option gibt
die Seite mit diversen User-Agents besuchen (alte Browser, mobile Browser, ...)
JavaScript anschauen, ob es hier entsprechende Hinweise gibt


Ansonsten hilft es eventuell auch einfach mal den Support zu fragen.
Die meisten Hoster finden es ja ganz okay, wenn jemand bei ihnen uppen möchte :D

darkness
22.11.2018, 03:12
Push.

Jemanden bekannt ob Vivo derweil ne (Upload) API hat?

Stelle derzeit die HTTP Requests die der Webupload auf der Seite macht nach. Sprich erst Login, dann Upload. Leider bekomme ich sehr oft einen 403 (forbidden) von der https://vivo.sx/push zurück

fluffyxz
23.11.2018, 00:55
Zoom machts auch nicht anderst
Erste zwei waren keine Videodateien, bricht dann aber auch direkt ab
dritter upload dann schon
https://www.szenebox.org/images/_imported/2018/11/29.jpg
Vll sind nicht alles gültige Videodateien was du da hochschiebst?

Jana-Maria
23.11.2018, 01:11
soweit ich weiß hat er damals keine dateien mit .mp4 als endung genommen.

darkness
23.11.2018, 08:14
Vll sind nicht alles gültige Videodateien was du da hochschiebst?


Meine Überlegung war ob es Files sind die "auf ner internen Blacklist stehen". Deswegen hab ich die Datei mal über den Webupload hochgeladen, der Upload war zwar langsam ging aber ohne weitere Probleme durch.

@ Jana-Maria. Guter Punkt. Sind aber MKV Files

Edit war hier:

Ich lade via PHP / Curl hoch.

Es wird ein Login getätigt der auch klappt. Ich fische mir die Session aus der Rückgabe (Header) und sende diese als "session" beim post auf https://vivo.sx/push mit, Cookies werden auch mitgesendet

Relevanter Code zum nachvollziehen der Geschichte

Erstmal drei Funktionen die für die Anfrage zuständig sind:



function cookie($url) {
return BASEPATH.'cookies/'.parse_url($url, PHP_URL_HOST).'.cookie';
}



function mime_type($file){

return 'video/x-matroska';

}


function request($url, $data = array(), $enableCookies = true, $redirect = false, $file = null) {

$ch = curl_init($url);

$userAgent = 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:11.0) Gecko/20100101 Firefox/11.0';

if($enableCookies) {
curl_setopt($ch, CURLOPT_COOKIEFILE, cookie($url));
curl_setopt($ch, CURLOPT_COOKIEJAR, cookie($url));
}

curl_setopt($ch, CURLOPT_USERAGENT, $userAgent); // empty user agents probably not accepted
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, $redirect);
curl_setopt($ch, CURLOPT_AUTOREFERER, 1); // enable this - they check referer on POST
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

if($file) {

if(!file_exists($file))
{
throw new Exception('File not found');
}

$mt = mime_type($file);
if(is_array($mt)){
throw new Exception("[error] mimetype failed for {$file} with message ".$mt['message']."\n");

}

$curl_file = new CurlFile(realpath($file), $mt, basename($file));

$data['file'] = $curl_file;

}

if(count($data)) {
curl_setopt($ch, CURLOPT_POST, count($data));
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
}
#curl_setopt($ch, CURLOPT_HEADERFUNCTION, "curlResponseHeaderCallback");
$response = curl_exec($ch);
$cookies = curl_getinfo($ch, CURLINFO_COOKIELIST);


$result = array(
'contents' => $response,
'request' => array(
'statusCode' => curl_getinfo($ch, CURLINFO_HTTP_CODE),
'info' => curl_getinfo($ch),
'cookies' => $cookies
)
);

curl_close($ch);

return $result;

}


Die Funktion die dann den Upload macht


<?php
function vivo_upload($file) {
global $cookies;

if(!file_exists($file)) throw new Exception('File not found');

$data['action'] = 'login';
$data['mail'] = '';
$data['password'] = '';

$response = request('https://vivo.sx/request', $data, true);

$json = json_decode($response['contents'], true);

if(!$json['status']) {
throw new Exception('[vivo.sx] Login failed');
}

$sid = str_replace('session=', '', $cookies[1]);
var_dump($sid); <-- korrekt
#exit();

$data = array();
$data['action'] = 'upload';
$data['session'] = $sid;
$data['size'] = filesize($file);

$response = request('https://vivo.sx/push', $data, true);
echo "<pre>";
print_r($response);

// hier gibt es einen 403 (forbidde) nicht immer aber sehr sehr oft

$server = json_decode($response['contents'], true);

if(json_last_error() != JSON_ERROR_NONE)
{
throw new Exception('[vivo.sx] Upload Pre Step failed');
}

$data = array(
'Filename' => basename($file),
'session' => $sid,
'name' => basename($file),
'Upload' => 'Submit Query',
'action' => 'push',

);

$response = request($server['PUSH'], $data, true, true, $file);
var_dump($response['contents']);
return (filter_var($response['contents'], FILTER_VALIDATE_URL) ? $response['contents'] : false );

}

$plugin_functions['vivo.sx'] = 'vivo_upload';

403 ist kein forbidden sondern nen access denied error

FLX
23.11.2018, 13:30
Ich hab gerade keinen Nerv mich da durch zu wühlen aber wenn es zeitweise geht dann hau mit einer Schleife drauf
auch wenn das unschön ist.

Finch
26.11.2018, 15:03
Allgemein, PHP ist dafür glaube ich nicht so richtig geeignet...

Hab dir trotzdem mal schnell was zusammengeschrieben was funktionieren sollte
(Guzzle via composer installieren)



<?php
require "vendor/autoload.php";

class VivoUpload{
public function __construct($mail, $password){
$this->userMail = $mail;
$this->userPassword = hash_pbkdf2('sha1', $password, strrev($password), 1024, 32);

$this->cookieFile = 'cookies.gzl';
$this->cookieJar = new \GuzzleHttp\Cookie\FileCookieJar($this->cookieFile, TRUE);

$this->client = new \GuzzleHttp\Client(
[
'cookies' => $this->cookieJar,
'headers' =>
[
'referer' => 'https://vivo.sx/upload',
]
]
);
}

public function login(){
$data = [
'action' => 'login',
'mail' => $this->userMail,
'password' => $this->userPassword
];

return $request = json_decode($this->sendRequest($data), TRUE);
}

public function uploadFile($filename){
$uploadServer = $this->getUploadServer($filename);
$cookieJarArray = $this->client->getConfig('cookies');

$response = $this->client->request('POST', $uploadServer, [
'multipart' =>
[
[
'name' => 'name',
'contents' => $filename,
],
[
'name' => 'action',
'contents' => 'push'
],
[
'name' => 'session',
'contents' => $cookieJarArray->toArray()[2]['Value']
],
[
'name' => 'file',
'contents' => fopen($filename, 'r'),
'headers' => ['Content-Type' => 'video/mp4']
],
]
]);

return $response->getBody()->getContents();
}

public function getUploadServer($filename){
$cookieJarArray = $this->client->getConfig('cookies');

$data = [
'action' => 'upload',
'session' => $cookieJarArray->toArray()[2]['Value'],
'size' => filesize($filename)
];

$response = json_decode($this->sendRequest($data), TRUE);

return $response['PUSH'];
}

public function sendRequest($data){
$response = $this->client->post(
'https://vivo.sx/request',
[
'form_params' => $data
]
);

return $response->getBody()->getContents();
}
}

$vivoObj = new VivoUpload('VIVO-MAIL', 'VIVO-PASSWORD');
$vivoObj->login();
$vivoObj->uploadFile('size.mp4'); // return: string vivolink

darkness
03.06.2019, 06:54
(halbwegs) aktuelles Update (working):


function vivo_upload($file, $filename) {
global $cookies, $config;

if(!file_exists($file)) throw new Exception('File not found');


$data['action'] = 'login';
$data['mail'] = $config['vivo.sx']['username'];
$data['password'] = $config['vivo.sx']['password'];


$response = request('https://vivo.sx/request', $data, true, null, null, true);

$json = json_decode($response, true);


if(!$json['status']) {
return false;
}


$sid = str_replace('session=', '', $cookies[1]);



$data = array();
$data['action'] = 'upload';
$data['session'] = $sid;
$data['size'] = filesize($file);


$response = request('https://vivo.sx/request', $data, false);


$server = json_decode($response, true);


if(json_last_error() != JSON_ERROR_NONE){
return false;
}


$data = array(
'Filename' => basename($file),
'session' => $sid,
'name' => basename($file),
'Upload' => 'Submit Query',
'action' => 'push',
);


$response = request($server['PUSH'], $data, true, true, $file, $filename);


return (filter_var($response, FILTER_VALIDATE_URL) ? $response : false );


}

Die request Funktion braucht ein Upgrade um Cookies zurückzugeben, falls sie es noch nicht kann ...

Also


curl_setopt($ch, CURLOPT_HEADERFUNCTION, "curlResponseHeaderCallback");


Also


function cookie($url) { return __DIR__.'/cookies/'.parse_url($url, PHP_URL_HOST).'.cookie';
}


function curlResponseHeaderCallback($ch, $headerLine) {
global $cookies;
if (preg_match('/^Set-Cookie:\s*([^;]*)/mi', $headerLine, $cookie) == 1)
$cookies[] = $cookie[1];
return strlen($headerLine); // Needed by curl
}

Uranjitsu
24.08.2019, 13:10
Warning: json_decode() expects parameter 1 to be string, array given in C:\wamp\apache2\htdocs\test.php on line 173