2013-12-09 3 views
0

Я пытаюсь отправить эквивалент параметра curl '-F' на указанный URL.Аргументы HttpPost, отправленные на сервер, возвращают ошибку HTTP 500

Это то, что команда выглядит, как с помощью Curl:

curl -F"optionName=cool" -F"[email protected]" http://myurl.com 

Я считаю, что я прав в использовании класса HttpPost в Apache httpcomponents библиотеки.

Я предоставляю имя = значение типа параметра. ОпцияName - это просто строка, а «файл» - это файл, который я сохранил локально на своем диске (следовательно, @myFile указывает его локальный файл).

Если я печатаю ответ, я получаю ошибку HTTP 500 ... Я не уверен, что вызывает проблему здесь, потому что сервер отвечает так же, как и при использовании команды Curl, упомянутой выше. Есть ли какая-то простая ошибка, которую я делаю при просмотре кода ниже?

HttpPost post = new HttpPost(postUrl); 
    HttpClient httpClient = HttpClientBuilder.create().build(); 

    List<BasicNameValuePair> nvps = new ArrayList<BasicNameValuePair>(); 
    nvps.add(new BasicNameValuePair(optionName, "cool")); 
    nvps.add(new BasicNameValuePair(file, "@myfile")); 

    try { 
     post.setEntity(new UrlEncodedFormEntity(nvps, "UTF-8")); 
     HttpResponse response = httpClient.execute(post); 
     // do something with response 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

ответ

1

Попробуйте использовать MultipartEntity вместо UrlEncodedFormentity, чтобы обрабатывать оба параметра и загрузки файла:

MultipartEntity entity = new MultipartEntity(); 
entity.addPart("optionName", "cool"); 
entity.addPart("file", new FileBody("/path/to/your/file")); 
.... 

post.setEntity(entity); 

Редактировать

MultipartEntity устарела и FileBody конструктор принимает File, а не String, так:

MultipartEntityBuilder entity = MultipartEntityBuilder.create(); 
entity.addTextBody("optionName", "cool"); 
entity.addPart("file", new FileBody(new File("/path/to/your/file"))); 
.... 
post.setEntity(entity.build()); 

С благодарностью @CODEBLACK.

+0

Тайна кода решена, thx ssssteffff! – CODEBLACK

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