Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Jak pobrać PDF z URL i zapisać go na serwerze?
Forum PHP.pl > Forum > PHP
emantuch
To znów ja biggrin.gif

Mam problem, gdyż testowałem już wiele form pobierania PDF na serwer i albo nie pobiera nic albo zwraca pusty plik. Mianowicie muszę pobrać PDF do katalogu Faktury
https://wfirma.pl/invoice_externals/download/ID/HASH

Jak mogę pobrać PDF spod takiego linku i zapisać go na serwerze?

Chciałem wykonać to w ten sposób:
  1. $source = 'https://wfirma.pl/invoice_externals/download/'.$id_faktury_w.'/'.$hash_faktury;
  2. $ch = curl_init();
  3. curl_setopt($ch, CURLOPT_URL, $source);
  4. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  5. curl_setopt($ch, CURLOPT_SSLVERSION,3);
  6. $data = curl_exec ($ch);
  7. $error = curl_error($ch);
  8. curl_close ($ch);
  9.  
  10. $destination = "faktury/test.pdf";
  11. $file = fopen($destination, "w+");
  12. fputs($file, $data);
  13. fclose($file);


ale zapisuje mi pusty test.pdf .
Wbijając taki link: https://wfirma.pl/invoice_externals/downloa...36;hash_faktury w przeglądarce pobiera się faktura.

Pomoże ktoś?

Pyton_000
linux: wget, curl
php: file_get_contents

to tylko przykłady
emantuch
Edytowałem swój 1 post, bo napisałem go tak jakbym sam nie próbował, a tutaj oczekiwał pomocy tylko.

Cytat(Pyton_000 @ 18.10.2015, 18:18:37 ) *
linux: wget, curl
php: file_get_contents

to tylko przykłady


Pyton_000 - file_get_contents zwracało mi pdf ale w formie takiej, że pobierało mi jakby kod html i zapisywało jako pdf - niestety nie było tam nic związanego z fakturą.


- wget testuję: exec('wget '.$source.' -O faktury/plik2.pdf'); w ten sposób nie pobiera nic. jeżeli zamiast stringa dodam url pobiera. Jak mogę zatem wgetem to wykonać?
vokiel
Możesz spokojnie za pomocą CURL tak jak robiłeś, tylko w skrypcie się wpierw zaloguj do serwisu.
emantuch
  1. curl_setopt($ch, CURLOPT_USERPWD, $login . ':' . $password);


zapisuje również pusty PDF .

PODSUMOWYWUJĄC:

  1. $source = 'https://wfirma.pl/invoice_externals/download/'.trim($id_faktury_w).'/'.$hash_faktury;

zwraca mi ładany link który jak skopiuję i wykonuję WGET w Linuxie pobiera mi fakturę - Logowanie jest niepotrzebne

Kod:
  1. $ch2 = curl_init();
  2. curl_setopt($ch2, CURLOPT_URL, $source);
  3. curl_setopt($ch2, CURLOPT_RETURNTRANSFER, 1);
  4. curl_setopt($ch2, CURLOPT_SSLVERSION,3);
  5. curl_setopt($ch2, CURLOPT_POST, 0);
  6. curl_setopt($ch2, CURLOPT_USERPWD, $login . ':' . $password);
  7.  
  8. $data2 = curl_exec ($ch2);
  9. $error = curl_error($ch2);
  10. curl_close ($ch2);
  11.  
  12. $destination2 = "faktury/test23123123.pdf";
  13. $file2 = fopen($destination2, "w+");
  14. fputs($file2, $data2);
  15. fclose($file2);


Tworzy mi PDF ale pusty i stoję bo nie wiem w którym kierunku iść.
Chciałem wykonać to w sposób:
  1. exec("wget $source -O faktury/faktura.pdf")

nie pobiera i nie tworzy pliku nawet pustego.
Jak zrobię
  1. exec("wget <a href="https://wartosc-source" target="_blank">https://wartosc-source</a> -O faktury/faktura.pdf")

Zapisuje mi plik tak jak chce zeby byl zapisany.

Czy wie ktoś co robię nie tak?
Pyton_000
a file_get_contents co Ci zapisuje? Jak html to tam pewnie będziesz miał jakiś błąd. Wiedząc co to za błąd dojdziesz do rozwiązania.
emantuch
Nie daje żadnego błędu. Daje kod HTML strony wfirma.

vokiel
  1. //Ustaw tryb verbose i loguj komunikację
  2. curl_setopt($ch2, CURLOPT_VERBOSE, true);
  3. curl_setopt($ch2, CURLOPT_STDERR, 'curl_output.log');
  4.  
  5. // Podążaj za przekierowaniami
  6. curl_setopt($ch2, CURLOPT_FOLLOWLOCATION, true);
  7.  
  8. // Jeśli powyższe nie da rezultatu
  9. // wyłącz weryfikację SSL
  10. curl_setopt($ch2, CURLOPT_SSLVERSION, false);
  11.  
  12. // może ustaw useragent i referer
  13. curl_setopt($ch, CURLOPT_REFERER, 'https://wfirma.pl/');
  14. curl_setopt($ch, CURLOPT_AUTOREFERER, true); // dla przekierowań
  15. curl_setopt($ch, CURLOPT_REFERER, 'Mozilla/5.0 (X11; Linux x86_64; rv:41.0) Gecko/20100101 Firefox/41.0');
  16.  
  17. // lub przekierowanie pobierania do pliku zamiast fputs
  18. curl_setopt($ch, CURLOPT_FILE, 'faktury/faktura.pdf');
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.