Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Jak pobrać PDF z URL i zapisać go na serwerze?
emantuch
post 18.10.2015, 17:04:43
Post #1





Grupa: Zarejestrowani
Postów: 22
Pomógł: 1
Dołączył: 23.09.2015

Ostrzeżenie: (0%)
-----


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ś?



Ten post edytował emantuch 18.10.2015, 17:20:30
Go to the top of the page
+Quote Post
Pyton_000
post 18.10.2015, 17:18:37
Post #2





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


linux: wget, curl
php: file_get_contents

to tylko przykłady
Go to the top of the page
+Quote Post
emantuch
post 18.10.2015, 17:29:11
Post #3





Grupa: Zarejestrowani
Postów: 22
Pomógł: 1
Dołączył: 23.09.2015

Ostrzeżenie: (0%)
-----


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ć?

Ten post edytował emantuch 18.10.2015, 17:57:40
Go to the top of the page
+Quote Post
vokiel
post 18.10.2015, 18:34:33
Post #4





Grupa: Zarejestrowani
Postów: 2 592
Pomógł: 445
Dołączył: 12.03.2007

Ostrzeżenie: (0%)
-----


Możesz spokojnie za pomocą CURL tak jak robiłeś, tylko w skrypcie się wpierw zaloguj do serwisu.


--------------------
Go to the top of the page
+Quote Post
emantuch
post 18.10.2015, 18:39:42
Post #5





Grupa: Zarejestrowani
Postów: 22
Pomógł: 1
Dołączył: 23.09.2015

Ostrzeżenie: (0%)
-----


  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?

Ten post edytował emantuch 18.10.2015, 18:56:25
Go to the top of the page
+Quote Post
Pyton_000
post 18.10.2015, 19:25:49
Post #6





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
emantuch
post 18.10.2015, 19:56:14
Post #7





Grupa: Zarejestrowani
Postów: 22
Pomógł: 1
Dołączył: 23.09.2015

Ostrzeżenie: (0%)
-----


Nie daje żadnego błędu. Daje kod HTML strony wfirma.



Ten post edytował emantuch 18.10.2015, 20:05:52
Go to the top of the page
+Quote Post
vokiel
post 19.10.2015, 07:35:27
Post #8





Grupa: Zarejestrowani
Postów: 2 592
Pomógł: 445
Dołączył: 12.03.2007

Ostrzeżenie: (0%)
-----


  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');


--------------------
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 9.05.2025 - 06:38