Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] wysylanie plikow przez curl w postaci binarnej
Octobus
post 14.06.2018, 09:19:26
Post #1





Grupa: Zarejestrowani
Postów: 259
Pomógł: 1
Dołączył: 3.07.2011

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


Witam,

pisze obsluge allegro api i stanalem na wysylaniu pliku metoda binarna do allegro. Taki jest ich przyklad:
Kod
curl -X POST \
  'https://upload.allegro.pl/sale/images
  -H 'authorization: Bearer {token}' \
  -H 'accept: application/vnd.allegro.beta.v1+json’ \
  -H 'content-type: "image/jpeg", "image/png", albo "image/gif”’ \
  -H ‘accept-language: pl-PL’, (albo en-EN) \
--data-binary "@file_to_upload.png"                -- wymagane, zawartość pliku z
                                                    obrazkiem w postaci binarnej

Wiec dalem
Kod
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://upload.'.$dane['host_allegro'].'/sale/images');
curl_setopt($ch, CURLOPT_POST, 1 );
curl_setopt($ch, CURLOPT_HEADER, 1 );
curl_setopt($ch, CURLOPT_POSTFIELDS, array(
    'file' => '@obrazek.jpg',
));
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Authorization: Bearer '.$dane['token'].'',
    'accept: application/vnd.allegro.beta.v1+json',
    'content-type: "image/jpeg"',
    'accept-language: pl-PL',
));
$postResult = curl_exec($ch);
curl_close($ch);

print_r($postResult);


Za kazdym razem jaka nie wpisze sciezke mam komunikat HTTP 415 Unsupported Media Type. Podejrzewam ze cos zle robie ale od godziny nie moge tego znalezc. Moze pole 'file' w POST powinno sie inaczej nazywac ? Moze podaje zla sciezke (plik ktory wywoluje i plik obrazka sa w tym samym folderze). Probowalem roznych obrazkow ale wszystko zwraca ten sam blad ...
Go to the top of the page
+Quote Post
nospor
post 14.06.2018, 09:31:43
Post #2





Grupa: Moderatorzy
Postów: 36 446
Pomógł: 6292
Dołączył: 27.12.2004




Pewnie slepne na starosc ale gdzie ty w tym kodzie wysylasz obrazek? Nazwe obrazka to widze ze wysylasz ale gdzie wysylasz obrazek?


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Octobus
post 14.06.2018, 10:46:21
Post #3





Grupa: Zarejestrowani
Postów: 259
Pomógł: 1
Dołączył: 3.07.2011

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


jak w takim razie powinno to wygladac w POST ? Dalem
Kod
'file' => file_get_contents('obrazek.jpg'),

oraz probowalem
Kod
'file' => '@'.file_get_contents('obrazek.jpg'),

i nic sie nie zmienilo :/

Ten post edytował Octobus 14.06.2018, 10:50:53
Go to the top of the page
+Quote Post
SmokAnalog
post 14.06.2018, 11:24:42
Post #4





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

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


Nazwa pliku musi być pełną ścieżką:

  1. curl_setopt($ch, CURLOPT_POSTFIELDS, array(
  2. 'file' => '@' . realpath('obrazek.jpg'),
  3. ));
Go to the top of the page
+Quote Post
Octobus
post 14.06.2018, 11:48:22
Post #5





Grupa: Zarejestrowani
Postów: 259
Pomógł: 1
Dołączył: 3.07.2011

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


ok juz wiem, jakby ktos szukal to tam trzeba bylo przeslac sam plik w post
Kod
curl_setopt($ch, CURLOPT_POSTFIELDS, file_get_contents('obrazek.jpg'));

oraz w header ustawic content-type bez apostrofow:
Kod
'content-type: image/jpeg'

Mimo wszystko dzieki, naprowadziliscie mnie. Pozdrawiam

Ten post edytował Octobus 14.06.2018, 11:48:42
Go to the top of the page
+Quote Post
SmokAnalog
post 14.06.2018, 12:00:46
Post #6





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

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


Hmm, tak się nie przesyła zwykle plików CURL-em, to jest bardzo niewydajny sposób. Ta biblioteka jest zoptymalizowana dla przesyłania plików właśnie po nazwie, więc powinno działać. Jak przekazujesz tam zawartość pliku na pałę, to cały plik jest rzucany w tę i we w tę w pamięci.

Ten post edytował SmokAnalog 14.06.2018, 12:02:14
Go to the top of the page
+Quote Post
Octobus
post 14.06.2018, 12:12:40
Post #7





Grupa: Zarejestrowani
Postów: 259
Pomógł: 1
Dołączył: 3.07.2011

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


tez bylem zaskoczony, dla tego nie moglem dojsc do tego ale teraz dziala. Allegro tak u siebie ma w api tongue.gif
Go to the top of the page
+Quote Post
nospor
post 14.06.2018, 12:27:59
Post #8





Grupa: Moderatorzy
Postów: 36 446
Pomógł: 6292
Dołączył: 27.12.2004




A probowales tak:

curl_setopt($ch, CURLOPT_POSTFIELDS, '@' . realpath('obrazek.jpg'));

?


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
batman
post 15.06.2018, 05:23:18
Post #9





Grupa: Moderatorzy
Postów: 2 921
Pomógł: 269
Dołączył: 11.08.2005
Skąd: 127.0.0.1




Od wersji php 5.5 zmianie uległ sposób wysyłania plików przy pomocy curl. Symbol @ zniknął, a w jego miejsce pojawiła się klasa CURLFile. W google znajdziesz przykłady użycia.


--------------------
I would love to change the world, but they won't give me the source code.
My software never has bugs. It just develops random features.
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: 18.04.2024 - 11:46