Выполнение Http-запроса на передачу файла

Тема в разделе "Lotus + Java + LS2J", создана пользователем shershun4ik, 21 июн 2011.

  1. shershun4ik

    shershun4ik Гость

    Задача такая: "надо передать файл на web-сервер". Метод http-запроса должен быть "POST".
    Вопросы:
    1. Как выполнить http-запрос из агента на Lotus Script?
    2. Как вставить бинарный файл в http-запрос?
     
  2. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
  3. shershun4ik

    shershun4ik Гость

    Проблема в том, что я java не знаю. Совсем не знаю. Есть ли возможность подключить к Lotus методы .NET?
     
  4. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
    не страдайте ... ерундой
    java - стандарт для домины и никаких виндо-перудляторов :)
    нечего там учить (в данном случае), особливо ежели шарпей знаете (МС его бессовестно драло с джава)
    не ищите себе колья в пятую точку, а пользуйтесь тем - что даёт платформа
    код, по ссылкам, запустите (для начала в любой java IDE: Eclipse, NetBeans)
    апачевскую либу надо будет распаковать и подсунуть в jvm/lib/ext, для запуска кода в домине
    по ссылке всякие туториалы и примеры
     
  5. shershun4ik

    shershun4ik Гость

    Что учить? Java или JavaScript?
     
  6. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
    а это-то, здесь, причём?
    java учить и выкинуть из головы шарпей :) - если, конечно, доминой планируете заниматься

    да и вобщем
    java гораздо распространённей (на ней работает куча глобальных проектов) и имеет больше либ (почти на все случаи жизни), кот. отрабатывались годами..., в отличии от офтопика (.НЕТ ещё неустаканившаяся платформа, сильно зависимая от МС)
    ну конечно - если без МС и башляния никак... :), но тогда вам и домина никчему ;)
     
  7. shershun4ik

    shershun4ik Гость

    Пытаюсь разобраться на основании примера

    http://stackoverflow.com/questions/1067655...1068132#1068132

    Вставляю код в NetBeans и java не видит класс org.apache.http.entity.FileEntity (говорит "неиспользуемый лператор импорта"). Что я делаю не так?

    Класс org.apache.http.entity.FileEntity есть в библиотеке httpcore-4.1.jar (раскрываю org.apache.http.entity и там есть FileEntity.class), но java ругается.

    Может быть такое, что она не находит используемые в org.apache.http.entity.FileEntity классы: java.io.File, java.io.IOException, java.io.InputStream, java.io_OutputStream? Java.io стандартно подключается ко всем проектам или я не прав?

    Вот как я скопировал код:

    Код (Text):
    /*
    * To change this template, choose Tools | Templates
    * and open the template in the editor.
    */
    package sendfile;

    /**
    *
    * @author User
    */
    import java.io.File;
    import org.apache.http.HttpEntity;
    import org.apache.http.HttpResponse;
    import org.apache.http.HttpVersion;
    import org.apache.http.client.HttpClient;
    import org.apache.http.client.methods.HttpPost;
    import org.apache.http.entity.FileEntity;
    import org.apache.http.impl.client.DefaultHttpClient;
    import org.apache.http.params.CoreProtocolPNames;
    import org.apache.http.util.EntityUtils;

    public class SendFile {


    /**
    * @param args the command line arguments
    */
    public static void main(String[] args) {

    HttpClient httpclient = new DefaultHttpClient();
    httpclient.getParams().setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1);

    HttpPost httppost = new HttpPost("http://localhost:9001/upload.php");
    File file = new File("c:/TRASH/zaba_1.jpg");

    MultipartEntity mpEntity = new MultipartEntity();
    ContentBody cbFile = new FileBody(file, "image/jpeg");
    mpEntity.addPart("userfile", cbFile);


    httppost.setEntity(mpEntity);
    System.out.println("executing request " + httppost.getRequestLine());
    HttpResponse response = httpclient.execute(httppost);
    HttpEntity resEntity = response.getEntity();

    System.out.println(response.getStatusLine());
    if (resEntity != null) {
    System.out.println(EntityUtils.toString(resEntity));
    }
    if (resEntity != null) {
    resEntity.consumeContent();
    }

    httpclient.getConnectionManager().shutdown();
    }

    }
     
  8. Zeka

    Zeka Well-Known Member

    Регистрация:
    1 сен 2009
    Сообщения:
    219
    Симпатии:
    0
    Видимо библиотека httpcore-4.1.jar не добавлена в classpath.
    Да, эти классы идут вместе c любой JRE. Спецально подключать не надо.

    ПС: Выложи stacktrace
     
  9. shershun4ik

    shershun4ik Гость

    С предыдущим примером я разобрался. Там моя ошибка. Неверно скопировал код.

    Есть еще вот такой вот пример:

    Код (Text):
    import org.apache.commons.httpclient.HttpClient;
    import org.apache.commons.httpclient.methods.PostMethod;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.IOException;

    public class SendFile {

    private static String url =
    "http://localhost:7000/FileUpload.ashx?basic=1";

    public static void main(String[] args) throws IOException {
    HttpClient client = new HttpClient();
    PostMethod postMethod = new PostMethod(url);

    client.setConnectionTimeout(8000);

    // Send any XML file as the body of the POST request
    File f = new File("D:/MediaID.bin");
    System.out.println("File Length = " + f.length());

    postMethod.setRequestBody(new FileInputStream(f));
    postMethod.setRequestHeader("Content-type",
    "text/xml; charset=ISO-8859-1");

    int statusCode1 = client.executeMethod(postMethod);

    System.out.println("statusLine>>>" + postMethod.getStatusLine());
    postMethod.releaseConnection();
    }
    }
    Вопросы по нему:

    1. Я не нашел в apache-евской библиотеке httpclient следующие классы:
    import org.apache.commons.httpclient.HttpClient;
    import org.apache.commons.httpclient.methods.PostMethod;

    Где их можно взять?

    2. В примере указывается одна строка в залоловке запроса:
    postMethod.setRequestHeader("Content-type", "text/xml; charset=ISO-8859-1");

    А мне надо передать еще дополнительные значения в заголовке. Как это сделать?
     
  10. Zeka

    Zeka Well-Known Member

    Регистрация:
    1 сен 2009
    Сообщения:
    219
    Симпатии:
    0
    1. org.apache.commons вроде как устаревший пакет. Искать в старых JARах.

    2. postMethod.setRequestHeader - сколько раз вызовешь метод с разными хёдерами, столько ВРОДЕ он их и добавит.
     
  11. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
    1. Zeka вам ответил, смотрите другой код (для более новой библиотеки, соответственно и либы др. для импорта)
    2. есть разные методы задачи параметров, для разных классов, шукайте здесь сморите экзампелы из архивов
    просто для разных ситуаций могут быть свои "подходы"
     
  12. shershun4ik

    shershun4ik Гость

    Вот такой у меня получился код

    Код (Text):
    package sendfile;

    import org.apache.commons.httpclient.HttpClient;
    import org.apache.commons.httpclient.methods.PostMethod;
    import org.apache.commons.httpclient.UsernamePasswordCredentials;
    import org.apache.commons.httpclient.auth.AuthScope;
    import org.apache.commons.httpclient.Credentials;

    import java.io.File;
    import java.io.FileInputStream;
    import java.io.IOException;

    public class SendFile {

    private static String url = "http://localhost:7000/FileUpload.ashx?basic=1";

    public static void main(String[] args) throws IOException {
    HttpClient client = new HttpClient();
    PostMethod postMethod = new PostMethod(url);

    client.setConnectionTimeout(8000);
    Credentials defaultcreds = new UsernamePasswordCredentials("USER", "**********");
    client.getState().setCredentials(AuthScope.ANY, defaultcreds);


    // Send any file as the body of the POST request
    File f = new File("D:/MediaID.bin");
    System.out.println("File Length = " + f.length());
    postMethod.setRequestBody(new FileInputStream(f));
    postMethod.setRequestHeader("Content-type", "application/octet-stream");
    postMethod.setRequestHeader("clientGuid", "06d8f57f-2c3e-4225-98f8-b1f02ff08a77");
    postMethod.setRequestHeader("value", "128");
    postMethod.setRequestHeader("FileName", "MediaID.bin");


    int statusCode1 = client.executeMethod(postMethod);

    System.out.println("statusLine>>>" + postMethod.getStatusLine());
    postMethod.releaseConnection();
    }
    }
    В ответ я получаю statusCode1 = 400 (BadRequest). Что я делаю не так?
     
  13. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
    если вы хотите добавлять параметры, дык их и добавляйте, по типу:<!--shcode--><pre><code class='java'>postMethod.addParameter(new NameValuePair("paramName", paramValue));[/CODE]а вы их в хидер пихаете

    Добавлено: и воще сморите юзаджи
     
  14. shershun4ik

    shershun4ik Гость

    У меня есть код на C#, который делает то, что мне надо. Там все это в Header пишется

    Еще один вопрос: "Как просмотреть текст http-запроса"?

    Код (Text):
     request.ContentType = "application/octet-stream";
    request.Method = "POST";
    request.Headers["clientGuid"] = ClientId.ToString();
    request.Headers["value"] =
    operationId.Value.ToString();
    request.Headers["FileName"] =
    Convert.ToBase64String(Encoding.UTF8.GetBytes(filename));
    Вот я и пишу по аналогии.
     
  15. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
    для клиентской части - для javascript есть, для серверной - на соответствующем сервере
    вы, так понимаю, обращаетеськ внешнему серваку (не встроенным/интегрированным в NetBeans)...
    ставьте снифер (любой), кот. http мониторит...
    я wireshark люблю ;) (он мониторит "всё", можно задать нужные фильтры, я так отслеживал заголовки, уходящие на торенттреккер)
     
  16. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
  17. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
  18. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
Загрузка...

Поделиться этой страницей