2008-11-24 4 views
3

Я хотел бы загрузить файлы из java-приложения/апплета, используя POST-событие http. Я хотел бы избежать использования любой библиотеки, не включенной в SE, если нет другого (возможного) варианта.
До сих пор я пришел только с очень простым решением.
- Создать строку (буфер) и заполнить ее совместимым заголовком (http://www.ietf.org/rfc/rfc1867.txt)
- Открыть соединение с сервером URL.openConnection() и записать содержимое этого файла в OutputStream.
Мне также нужно вручную преобразовать двоичный файл в событие POST.

Надеюсь, что есть лучший, более простой способ сделать это?как (просто) генерировать POST-запрос HTTP из java для загрузки файла

+0

Пожалуйста, объясните, почему вы не хотите использовать внешнюю библиотеку. Ясно, что это возможно * без каких-либо внешних библиотек, но вы в основном будете дублировать усилия (скажем) HttpClient (http://hc.apache.org/httpcomponents-client/index.html) – 2008-11-24 14:46:00

ответ

3

Вам нужно узнать о кодировке с кодировкой, используемой в новых версиях HTTP. Библиотека Apache HttpClient является хорошей справочной версией для изучения.

8

Вам необходимо использовать классы java.net.URL и java.net.URLConnection.

Есть несколько хороших примеров в http://java.sun.com/docs/books/tutorial/networking/urls/readingWriting.html

Вот некоторые быстрый и противный код:

public void post(String url) throws Exception { 
    URL u = new URL(url); 
    URLConnection c = u.openConnection(); 

    c.setDoOutput(true); 
    if (c instanceof HttpURLConnection) { 
     ((HttpURLConnection)c).setRequestMethod("POST"); 
    } 

    OutputStreamWriter out = new OutputStreamWriter(
     c.getOutputStream()); 

    // output your data here 

    out.close(); 

    BufferedReader in = new BufferedReader(
       new InputStreamReader(
        c.getInputStream())); 

    String s = null; 
    while ((s = in.readLine()) != null) { 
     System.out.println(s); 
    } 
    in.close(); 
} 

Обратите внимание, что вам, возможно, нужно UrlEncode() данные POST перед записью соединения.