Хочу отправить файл на удаленный сервак с подменой MIME-типа. Но почему-то вместо POST уходят GET-запросы. Хотя CURLOPT_POST установил в TRUE. Что здесь не так? PHP: <?php $username = "password"; $password = "login"; $url = "http://10.4.0.11:80/php/mimecheck.php"; $fileLocation = "/var/www/mime.com/sendfile/info.php"; if (!is_file($fileLocation)){ echo "Файл не найден"; exit(); } $data = array( 'file' => new CURLFile($fileLocation,'image/jpeg','img') ); $curl = curl_init($url); curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); curl_setopt($curl, CURLOPT_USERPWD, $username . ":" . $password); curl_setopt($curl,CURLOPT_POST, TRUE); curl_setopt($curl, CURLOPT_UPLOAD, TRUE); curl_setopt($curl, CURLOPT_POSTFIELDS, $data); curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE); $response = curl_exec($curl); if (curl_errno($curl)){ echo '<span style="color:red">'; echo curl_error($curl); echo '</span>'; } else { echo '<span style="color:green">'; echo $response; echo '</span>'; }
Еще добавил заголовок, но тип файла в запросе не меняется. Скорее всего причина обоих проблем в чем-то одном. PHP: $headers = array( "Content-type: text/xml;charset=\"utf-8\"" ); curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); Заголовок добавил сразу после строки CURLOPT_UPLOAD --- Добавлено --- а, это ж ГЕТ - запрос к самому скрипту. Понял
@Сереганек, в браузере ты никак не можешь видеть, какой запрос шлеться от курла. Эта кухня работает на сервере.
тупо сделай на сервере логирование типа залогируй в текстовик $_GET и $_POST и увидишь что у тебя на сервер передается ))))
Это хорошо если есть доступ к северу-получаетелю запроса). @Сереганек, PHP: curl_getinfo($ch) будет показывать инфу о запросе, метод запроса будет или нет.
На сервере-получателе вывел в файл заголовки и содержимое $_GET, $POST, $_REQUEST Заголовки показали (выводил через getallheaders()) : HTML: Host: 10.4.0.9 Authorization: Basic aW5qZWN0aW9uOjBwYzIybWZn Accept: */* Transfer-Encoding: chunked Expect: 100-continue А в $_GET, $POST, $_REQUEST вообще пусто. $_SERVER[REQUEST_METHOD] почему-то равен PUT. Странная картина. На сервере, откуда идет отправка файла, посмотрел содержимое в curl_getinfo(). Там тоже что-то странное: HTML: ["content_type"]=> string(24) "text/html; charset=UTF-8" Хотя я контент тайп меняю на xml : PHP: $headers = array( "Content-type: text/xml;charset=\"utf-8\"" ); curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
Проходит. Если я закомментирую строки для авторизации, то получаю 401 еще в консоли при отправке запроса. И текстовый файл не создается. Ну логично ведь, если я получил лог, который генерится в принимающем запрос скрипте, значит авторизация пройдена. В заголовках Authorization: Basic aW5qZWN0aW9uOjBwYzIybWZn Вот мой оконсательный вариант кода: PHP: <?php $username = "login"; $password = "password"; $url = "http://10.4.0.9:80/php/mimecheck.php"; $fileLocation = "/var/www/mime.com/sendfile/info.php"; if (!is_file($fileLocation)){ echo "Файл не найден"; exit(); } $data = array( 'file' => new CURLFile($fileLocation,'image/jpeg','img') ); $headers = array( "Content-type: text/xml;charset=\"utf-8\"" ); $curl = curl_init($url); curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); curl_setopt($curl, CURLOPT_USERPWD, $username . ":" . $password); curl_setopt($curl,CURLOPT_POST,TRUE); curl_setopt($curl, CURLOPT_UPLOAD, TRUE); curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); curl_setopt($curl, CURLOPT_POSTFIELDS, $data); curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE); $response = curl_exec($curl); if (curl_errno($curl)){ echo '<span style="color:red">'; echo curl_error($curl); echo '</span>'; } else { echo '<span style="color:green">'; echo $response; echo '</span>'; }
Не надо отправлять файлы на удаленный сервак с подменой MIME. --- Добавлено --- Ссылка у меня в подписи, пункт 7.