[PHP] Download torrent file

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • ZeroXT
  • Registratie: December 2007
  • Laatst online: 19-09 13:56
Ik probeer een torrentbestand te downloaden van een website met PHP:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
$url = 'http://website.nl/tor.torrent';
$path = '\\folder\\';
$name = 'tor.torrent';

//Version 1
copy($url, $path . $name);

//Version 2
file_put_contents($path . $name, file_get_contents($url));

//Version 3
$ch = curl_init();
$timeout = 5;
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$data = curl_exec($ch);
curl_close($ch);
file_put_contents($path . $name, $data);

//Version 4
$source = file_get_contents($url);

$torrent = fopen($path . $title[1] . '.torrent', 'xb');
fwrite($torrent, $source);
fclose($torrent);


De torrent wordt gedownload maar als ik deze in de client plak, dan wordt er een melding gegeven dat de torrent verkeerd ge-encode is. Als ik via de browser de torrent download, werkt deze wel.

Wanneer ik deze met de browser download dan is de content van de torrent inclusief headers en trackers etc. Maar als ik de torrent open die met PHP gedownload is dan zie ik iets in de trand van:

code:
1
2
3
4
5
6
1f8b 0800 0000 0000 0203 acf7 63b0 7041
dba5 091e dbb6 6dfb 39b6 6ddb b66d dbb6
6ddb b66d dba7 dfaa faaa a3aa a23b 6622
667e edd8 99d7 5ab9 ee7b c78e cc34 e6e0
32b0 b5b5 73b1 3532 6166 e372 31b6 e7a2
a7b7 b337 b1a5 3336 b1b1 b3b5 b0a0 33b2

Acties:
  • 0 Henk 'm!

  • Feanathiel
  • Registratie: Juni 2007
  • Niet online

Feanathiel

Cup<Coffee>

1f8b ziet eruit als een gzip header. Al een geprobeerd om hem te inflaten? Het lijkt erop dat alle genoemed methodes hier standaard geen rekening mee houden.

[ Voor 3% gewijzigd door Feanathiel op 02-09-2014 17:49 ]


Acties:
  • 0 Henk 'm!

  • ZeroXT
  • Registratie: December 2007
  • Laatst online: 19-09 13:56
Hartelijk bedankt, dat was inderdaad het geval. Ik kreeg een gzip bestand terug met daarin het torrent bestand. Deze moest ik eerst uitpakken:

PHP:
1
file_put_contents($path . $name, gzdecode(file_get_contents($url)));

Acties:
  • 0 Henk 'm!

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
Vanwege dit soort redenen is het niet handig om basisfuncties als copy/filegetcontents op een geavanceerd protocol als http los te laten.

Als je iets van http wilt hebben gebruik dan gewoon higher level functions als de curl library oid die snappen namelijk wat er over http gestuurd wordt en handelen daar ook naar.
Gewoon in optie 3 de volgende optie toevoegen :
PHP:
1
curl_setopt($ch,CURLOPT_ENCODING, '');

En curl accepteert en decode de boel voor je als het encoded aangeboden wordt. Wordt het niet encoded aangeboden dan gaat het met curl nog steeds goed terwijl jouw harde gzdecode dan de mist in gaat.

De verzendende server geeft gewoon netjes aan of de boel encoded is of niet, zoja dan doet handelt curl het af, zonee dan handelt curl het ook af.