Mam tu mały problem, w jaki sposób mogę powiedzieć cURL, że chce załączyć plik do żądania?Korzystanie z narzędzia cURL w celu przesłania pliku bez symbolu @?
Jeśli mam przesłać plik z cURL, wówczas powszechną metodą jest dołączenie go jako część tablicy danych POST z wartością mającą @ przed nim, na przykład:
CURLOPT_POSTFIELDS=>array('my-file'=>'@my-file.txt')
Ten sposób oczywisty działa, ale mam z tym dwa problemy:
- Co jeśli to nie jest plik, który ładuję? Co się stanie, jeśli moja wartość POST rzeczywiście jest "@ my-file.txt" i spróbuje w zamian załadować plik? Tworzy lukę, której desperacko próbuję uniknąć.
- Jak mogę przesłać plik z adresu URL? Czy muszę go pobrać, zapisać w folderze tymczasowym, a następnie dołączyć do @ z tego folderu tymczasowego? Dlaczego nie mogę podać cURL tylko treści, które chcę użyć jako pliku?
cURL CURLOPT_INFILE nie jest opcją, ponieważ nie pojawi się jako część tablicy $ _FILES.
Wygląda na to, że taka luka w cURL zależy od znaku @ w wartości pola POST. Czy jest jakiś sposób obejścia tego? Dlaczego nie ma tablicy CURLOPT_FILEFIELDS? Wiersz polecenia cURL ma osobną flagę dla tego (-F), ale nie widzę tego jako opcji w PHP z jakiegoś powodu.
Każda pomoc będzie bardzo ceniona, dzięki!
Re lufą, wydaje się, że to nie jest możliwe: https://bugs.php.net/bug.php?id=46439 będziesz musiał ręcznie sprawdzić obecność '@' podczas sprawdzania wartości wejściowych. –
Może ['http_build_query'] (http://php.net/http_build_query), jak w [tej odpowiedzi] (http://stackoverflow.com/a/648296/773625)? – mAu
Dzięki Pekka, szkoda tylko, że nie było rozwiązania. Ale mAu: To nie działa, ponieważ mój interfejs API również musiałby obsługiwać przesyłanie plików. Wszystko byłoby dobrze, gdyby można było przesyłać pliki oddzielnie od pól POST i muszę również przesłać pewne dane w POST (ponieważ istnieją granice GET, których nie ma w POST). – kingmaple