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: 236
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: 33 981
Pomógł: 5604
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?


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

Najlepsze kawałki programistyczne || Dowcipy o informatykach || Forum PHP dla opornych
Klasy: Pager (stronicowanie) | Cache | ShoutBox (Chat) | Widok | Ładne url'e

"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: 236
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 463
Pomógł: 235
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: 236
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 463
Pomógł: 235
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: 236
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: 33 981
Pomógł: 5604
Dołączył: 27.12.2004




A probowales tak:

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

?


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

Najlepsze kawałki programistyczne || Dowcipy o informatykach || Forum PHP dla opornych
Klasy: Pager (stronicowanie) | Cache | ShoutBox (Chat) | Widok | Ładne url'e

"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 893
Pomógł: 265
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.
--------------------
blog
Kuchnia Kopytka
www.wykangurzeni.pl
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: 24.06.2018 - 23:37