2012-06-14 3 views
0

Я пытаюсь протестировать rest api для загрузки локального файла на https-url. В настоящее время я использую curl для этого. Проблема в том, что мой POST в curl преобразуется в PUT (http://curl.haxx.se/docs/manpage.html). Чтобы проверить из командной строки Я использую следующие:Загрузка локального документа с использованием php

завитка -H "Content-Type: применение/JSON" -H "Authorization: Bearer XXXXXXXXXXXXXXXYYYYYzzzzzz" -H "Accept-версии: ~ 1" - H "За исключением: 100-Continue" -H "Accept-версии: ~ 1" -T "somefile.pdf" "https://abc-xyz.co/docs"

Выход:

{"code":"BadMethod","message":"/docs does not support PUT"} 

мой код php:

$url = '"https://abc-xyz.co/docs'; 
$filepath = '/Users/me/Documents/somefile.pdf'; //mac path 
$ch = curl_init($url); 
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); 
curl_setopt($ch, CURLOPT_HTTPHEADER, 
array('Authorization: Bearer XXXXXXXXXXXXXXXYYYYYzzzzzz', 'Accept-Version: ~1', 'Except: 100-continue'); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLINFO_HEADER_OUT, true); 
$file = "@".$filepath; 
curl_setopt($ch, CURLOPT_POSTFIELDS,$file); 
$response = curl_exec($ch); 
if(!CURL_ERROR($ch)) 
    {  
    echo"\n The output is:".$response; 
    } 
else 
    { 
    echo "\nUpload failed ".curl_error($ch); 
    exit; 
    } 
curl_close($ch); 

Выход: я получаю ошибку синтаксического анализа.

Может кто-нибудь просветить меня с 3-мя вещами:

  1. Могу ли я использовать локон, чтобы сделать POST для HTTPS? если да, то как? и если нет, то каким должен быть мой подход?
  2. Как передать путь к файлу в моем php? Я попробовал «@». $ Filepath тоже, но он все равно не нравится.
  3. Если я хочу ограничить мой тип загрузки файлов только pdf, я должен использовать тип mime? (Приложение/PDF ????)

Спасибо, DR

ответ

0

Из командной строки см post fileupload with curl.

От PHP см the manual

Полные данные размещать в HTTP операции "POST". Чтобы опубликовать файл, добавьте имя файла с помощью @ и , используя полный путь. Тип файла может быть явно указан, следуя имени файла с типом в формате '; type = mimetype'. Этот параметр может быть передан как строка с urlencoded, как «para1 = val1 & para2 = val2 & ...» или как массив с именем поля в качестве ключа и данными поля в качестве значения. Если значением является массив, заголовок Content-Type будет установлен в multipart/form-data. Начиная с PHP 5.2.0, значение должно быть массивом, если файлы передаются с этим префиксом @.

curl_setopt($ch, CURLOPT_POSTFIELDS,array('someuploadname'=> "@".$filepath)); 
+0

Thank you Wrikken. Я попробую то, что вы предложили. – 38172

+0

Я смотрел на постфайлов с curl. но проблема в том, что я отправляю файл через https, а POST из Curl преобразуется в «PUT», который мой сервер не поддерживает. Мне нужна помощь в том, как загрузить локальный файл, используя POST через https. – 38172

+0

@ 38172: тогда я не могу воспроизвести вашу проблему. Сообщение с массивом в php, как упоминалось, просто _works здесь (tm) _ ... и вот и вот, ответ суперпользователя с curl работает здесь тоже. Вы уверены, что проблема не в прокси/принимающей стороне? – Wrikken

Смежные вопросы