Miałem podobny problem, próbując nakarmić ogromne pliki do spożywania elastycznego interfejsu API firmy elasticsearch z PHP, dopóki nie zdałem sobie sprawy, że większość akceptowanych żądań PPP API PUT. W każdym razie, ten kod wykonuje żądania POST z dużych plików:
$curl = curl_init();
curl_setopt($curl, CURLOPT_PUT, 1);
curl_setopt($curl, CURLOPT_INFILESIZE, filesize($tmpFile));
curl_setopt($curl, CURLOPT_INFILE, ($in=fopen($tmpFile, 'r')));
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($curl, CURLOPT_HTTPHEADER, [ 'Content-Type: application/json' ]);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($curl);
curl_close($curl);
fclose($in);
Tutaj $tmpFile
jest pełna ścieżka do pliku zawierającego treści żądania.
UWAGA: Ważną częścią jest ustawienie CURLOPT_CUSTOMREQUEST
do 'POST'
chociaż CURLOPT_PUT
jest ustawiony.
Będziesz musiał dostosować nagłówek Content-Type:
do tego, czego oczekuje serwer.
Korzystanie tcpdump, mogę potwierdzić metody żądania POST być:
POST /my_index/_bulk HTTP/1.1
Host: 127.0.0.1:9200
Accept: */*
Content-Type: application/json
Content-Length: 167401
Expect: 100-continue
[...snip...]
używam pakiety libcurl3 (wersja 7.35.0-1ubuntu2.5) i php5-curl (wersja 5.5.9+ dfsg-1ubuntu4.11) na Ubuntu 14.04.
Aby umieścić plik na serwerze, spróbuj tego: http://stackoverflow.com/questions/4223977/send-file-via-curl-from-form-post-in-php – silkfire