Anmelden

Archiv verlassen und diese Seite im Standarddesign anzeigen : (PHP) - Verystream Download-Link



Uranjitsu
03.09.2019, 17:48
Hallo zusammen,

hat jemand einen fertigen schnipsel um einen vernünftigen download-link zu generieren?
Verstehe das mit dem Captcha erzeugen nicht...

Ich möchte einen Download-Link erzeugen, damit der User dann eben die Datei herunterladen kann.

LG

Finch
03.09.2019, 19:25
Erstmal das aufrufen
https://api.verystream.com/file/dlticket?file={file}&login={login}&key={key}

captcha_url im img tag ausgeben, damit der User das da eingeben kann

https://api.verystream.com/file/dl?file={file}&ticket={ticket}&captcha_response={captcha_response}

ticket => ticket aus Schritt 1
captcha_response => das, was der User auf dem Captcha sieht (usereingabe)

dann haste den Download link

Uranjitsu
05.09.2019, 16:48
Danke dir!

- - - - - - - - - - Beitrag nachträglich erweitert - - - - - - - - - -

Mit dem Upload habe ich ebenfalls schwierigkeiten


function verystream_upload($file)
{
$headers = array("Content-Type:multipart/form-data");
$POST_DATA = array(
'file' => '@' . $file,
);

$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, "https://api.verystream.com/file/ul?login=xxx&key=xxxxx");
/*curl_setopt($curl, CURLOPT_POST, 1);*/
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $POST_DATA);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'GET');
$curl_exec = curl_exec($curl);
curl_close($curl);
$res = json_decode($curl_exec, true);

return $res;
}

$upload = verystream_upload('test.zip');

echo "Test1";
echo "<hr />";
echo $upload['result']['url'];
echo "<hr />";
echo '<pre>' . var_export($upload, true) . '</pre>';

Ich bekomme aber dies zurück:

array (
'status' => 200,
'msg' => 'OK',
'result' =>
array (
'url' => 'https://ohsomp4wow.verystream.net/uploadproxy/OYAHx67_ADjldxyy',
'valid_until' => '2019-09-05 17:46:11',
),
)
Beim Aufruf des Links sagt er aber:
msg: no POST request: GET
status: 400

https://verystream.com/api#upload

fluffyxz
05.09.2019, 17:17
Du darfst das File nicht gleich mitschicken
Erst ein Request an

https://api.verystream.com/file/ul?login={login}&key={key}
=>
array (
'status' => 200,
'msg' => 'OK',
'result' =>
array (
'url' => 'https://ohsomp4wow.verystream.net/uploadproxy/OYAHx67_ADjldxyy',
'valid_until' => '2019-09-05 17:46:11',
),
)
Das File dann einfach an die result.url
https://ohsomp4wow.verystream.net/uploadproxy/OYAHx67_ADjldxyy schicken

Uranjitsu
05.09.2019, 17:55
Kann man das in einem CURL-Durchgang erledigen? Oder muss ich dazu einen zweiten Curl(function) anlegen?

- - - - - - - - - - Beitrag nachträglich erweitert - - - - - - - - - -

Ich glaube, ich habe noch einen Denkfehler dabei?


function verystream_upload_url()
{
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, "https://api.verystream.com/file/ul?login=xxxxx&key=xxxx");
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_POST, 1);
/*curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'GET');*/
$curl_exec = curl_exec($curl);
curl_close($curl);
$res = json_decode($curl_exec, true);

return $res;
}

function verystream_upload($url, $file)
{
$header = array('Content-Type: multipart/form-data');
$fields = array('file' => '@/' . base64_encode($file));

$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $fields);
/*curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'GET');*/
$curl_exec = curl_exec($curl);
curl_close($curl);
$res = json_decode($curl_exec, true);

return $res;
}

$upload_url = verystream_upload_url();
$upload = verystream_upload($upload_url['result']['url'], 'test.zip');

echo "Test2576767";
echo "<hr />";
echo $upload_url['result']['url'];
echo "<hr />";
echo '<pre>' . var_export($upload_url, true) . '</pre>';
echo "<hr />";
echo '<pre>' . var_export($upload, true) . '</pre>';

Ich schicke das file an ausgegebene url "$upload_url['result']['url']" ?

fluffyxz
05.09.2019, 18:07
Sollte so eigentlich gehen
Aber warum aufeinmal

$fields = array('file' => '@/' . base64_encode($file));
?
Musst mal schauen, in denen ihr Beispiel ist file1 statt file angegeben

$fields = array('file1' => '@/' . $file);

Uranjitsu
06.09.2019, 16:45
Ja richtig, weil ich das mit beiden Varianten versucht habe.

Das ist das aktuellste:

function verystream_upload($url, $file)
{
// Generated by curl-to-PHP: http://incarnate.github.io/curl-to-php/
$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$post = array(
'file' => '@' . realpath($file),
);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
curl_setopt($ch, CURLOPT_POST, 1);

$headers = array();
$headers[] = 'Content-Type: multipart/form-data';
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

$result = curl_exec($ch);
if (curl_errno($ch)) {
$res = 'Error:' . curl_error($ch);
}
curl_close($ch);
$res = json_decode($result, true);

return $res;
}

Ob ich Content-Type: multipart/form-data oder Content-Type: application/x-www-form-urlencoded nutze, zurück erhalte ich:

array (
'msg' => 'upload failed: no boundary defined in Content-Type',
'status' => 500,
)

darkness
06.09.2019, 19:02
hey,

file1 nicht file :)

Wäre es dir alternativ möglich den Upload mal mit der CurlFile Klasse zu probieren?

Uranjitsu
08.09.2019, 12:25
Ich habe es mit file und file1 probiert. Immer der gleiche Fehler.

Curlfile teste ich mal