Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]wysyłanie plików przez curl
olszam
post 9.07.2019, 08:47:12
Post #1





Grupa: Zarejestrowani
Postów: 342
Pomógł: 23
Dołączył: 20.01.2011
Skąd: Chełm

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


Czy tak powinno wyglądać wysyłanie plików przez curl?

  1. function post_data2($site,$data,$reffer){
  2.  
  3. $datapost = curl_init();
  4. $headers = array('Referer: '.$reffer,
  5. "Content-Type" => "multipart/form-data");
  6.  
  7. curl_setopt($datapost, CURLOPT_RETURNTRANSFER, TRUE);
  8. curl_setopt($datapost, CURLOPT_URL, $site);
  9. curl_setopt($datapost, CURLOPT_ENCODING, 'gzip, deflate');
  10. curl_setopt($datapost, CURLOPT_TIMEOUT, 40000);
  11. curl_setopt($datapost, CURLOPT_HEADER, TRUE);
  12. curl_setopt($datapost, CURLOPT_HTTPHEADER, $headers);
  13. curl_setopt($datapost, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
  14. curl_setopt($datapost, CURLOPT_POST, TRUE);
  15. curl_setopt($datapost, CURLOPT_POSTFIELDS, $data);
  16. curl_setopt($datapost, CURLOPT_COOKIEFILE, "cookie.txt");
  17.  
  18. $r = curl_exec ($datapost);
  19. curl_close ($datapost);
  20. unset($datapost);
  21. return $r;
  22.  
  23. }
  24.  
  25. $file = array('file'=>'@'.realpath('plik').';filename=plik',"name"=>"FFFXXX@plik");
  26. post_data2("......",$file,'......'.substr($htmltest->find('input[id=ID_ADD]')[0]->onclick,22,-2));


Wykorzystałem gotową funkcję z której korzystam do ściągania danych. Pytam bo jak daję na echo post_data2 to nie wygląda tak jakbym tego oczekiwał smile.gif.
Go to the top of the page
+Quote Post
aras785
post 9.07.2019, 23:49:07
Post #2





Grupa: Zarejestrowani
Postów: 859
Pomógł: 177
Dołączył: 29.10.2009

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


Cześć,

napisałem działający kod:

curl.php

  1. /**
  2.  * @author aras785
  3.  * @param string $url
  4.  * @param array $data
  5.  * @param string $referer
  6.  * @return string
  7.  */
  8. function sendPostDataUsingCurl(string $url, array $data, string $referer): string
  9. {
  10.  
  11. $ch = curl_init();
  12. curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
  13. curl_setopt($ch, CURLOPT_ENCODING, 'gzip, deflate');
  14. curl_setopt($ch, CURLOPT_TIMEOUT, 40000);
  15. curl_setopt($ch, CURLOPT_HEADER, TRUE);
  16. curl_setopt($ch, CURLOPT_HTTPHEADER, ['Referer: ' . $referer, 'Content-Type' => 'multipart/form-data']);
  17. curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
  18. curl_setopt($ch, CURLOPT_COOKIEFILE, "cookie.txt");
  19. curl_setopt($ch, CURLOPT_URL, $url);
  20. curl_setopt($ch, CURLOPT_POST, TRUE);
  21. curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
  22.  
  23. $response = curl_exec($ch);
  24. curl_close($ch);
  25.  
  26. return $response;
  27. }
  28.  
  29. $file = new CurlFile('zdjecie.jpg');
  30. echo sendPostDataUsingCurl('https:/example.com/index.php', ['image' => $file], 'https://wp.pl');


oraz standardowy formularz ze strony (https://www.tutorialspoint.com/php/php_file_uploading):

index.php:
  1. <?php
  2. if(isset($_FILES['image'])){
  3. $errors= array();
  4. $file_name = $_FILES['image']['name'];
  5. $file_size =$_FILES['image']['size'];
  6. $file_tmp =$_FILES['image']['tmp_name'];
  7. $file_type=$_FILES['image']['type'];
  8. $file_ext=strtolower(end(explode('.',$_FILES['image']['name'])));
  9.  
  10. $extensions= array("jpeg","jpg","png");
  11.  
  12. if(in_array($file_ext,$extensions)=== false){
  13. $errors[]="extension not allowed, please choose a JPEG or PNG file.";
  14. }
  15.  
  16. if($file_size > 2097152){
  17. $errors[]='File size must be excately 2 MB';
  18. }
  19.  
  20. if(empty($errors)==true){
  21. move_uploaded_file($file_tmp,"upload/".$file_name);
  22. echo "Success";
  23. }else{
  24. print_r($errors);
  25. }
  26. }
  27. ?>
  28. <html>
  29. <body>
  30.  
  31. <form action="" method="POST" enctype="multipart/form-data">
  32. <input type="file" name="image" />
  33. <input type="submit"/>
  34. </form>
  35.  
  36. </body>
  37. </html>


U mnie ładnie się wrzuca, daj znać czy u Ciebie działa.

Pozdrawiam
Go to the top of the page
+Quote Post
olszam
post 10.07.2019, 07:47:04
Post #3





Grupa: Zarejestrowani
Postów: 342
Pomógł: 23
Dołączył: 20.01.2011
Skąd: Chełm

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


Sam formularz działa, curl natomiast nie smile.gif. Ciekawe czy ja coś z xamppem mam bo ogólnie curl działa mogę pobrać cały html i wyciągnąć dane tylko problem mam z wysyłaniem plików.
Go to the top of the page
+Quote Post
mieniu
post 10.07.2019, 22:30:40
Post #4





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 8.07.2019

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


Hmm... to sprawdź czy jesteś w stanie wysłać plik na serwer z cmd: curl -F 'data=plik.txt' http://twoj-host
Go to the top of the page
+Quote Post
aras785
post 10.07.2019, 22:39:49
Post #5





Grupa: Zarejestrowani
Postów: 859
Pomógł: 177
Dołączył: 29.10.2009

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


Wrzuć mój kod + obrazek zdjecie.jpg na serwer (pamiętaj maks 2mb) to Ci zadziała smile.gif
Go to the top of the page
+Quote Post
olszam
post 11.07.2019, 06:49:01
Post #6





Grupa: Zarejestrowani
Postów: 342
Pomógł: 23
Dołączył: 20.01.2011
Skąd: Chełm

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


Cytat
Hmm... to sprawdź czy jesteś w stanie wysłać plik na serwer z cmd: curl -F 'data=plik.txt' http://twoj-host

z tą komenda akurat działa
Kod
curl --form "image=@zdjecie.png" http://localhost/curl_szoi3/zxc.php


Cytat
Wrzuć mój kod + obrazek zdjecie.jpg na serwer (pamiętaj maks 2mb) to Ci zadziała smile.gif

ehhh no nic nie zmieniałem i dalej nic a obrazek to jakieś 30kb waży smile.gif

edit:
skoro wysyła się prze komendę a nie chce skryptem php to chyba będzie trzeba wysyłać z użyciem exec() smile.gif ciekawe jak będzie to wyglądać taki namieszany kod że raz skrypt php a raz exec() smile.gif

Ten post edytował olszam 11.07.2019, 13:04:01
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: 28.03.2024 - 21:06