Curl Объект для Генерации URL - PullRequest
0 голосов
/ 21 марта 2012

У меня есть веб-сервис, который я пытаюсь вызвать:

Следующая команда Curl работает для этого

    curl -F fa=c.apiupload -F sessiontoken=EA3237F922644115A0F7DB75D0AE388F -F destfolderid=52482BD488DB4AD6887C5C7BF47BD6FC -F filedata=@/Users/cpinera/tmp/panda2.jpg -F zip_extract=1 -F metadata=1 -F meta_img_description="This is a very nice panda" -F meta_img_keywords="panda,happy panda" http://domain.com/razuna/raz1/dam/index.cfm

, но эквивалентный URL-адрес, который я генерирую как HttpURLConnection для доступа к RESTFul API, делаетне:

 http://domain.com/razuna/raz1/dam/index.cfm?fa=c.apiupload&sessiontoken=F46D2226463C4ADE866819AACD7D2F5E&filedata=C:\JobInterview\BatchUpload\auth.xml&destfolderid=52482BD488DB4AD6887C5C7BF47BD6FC&zip_extract=1

Я получаю этот ответ для запроса REST:

   The content was :: <?xml version="1.0" encoding="UTF-8"?><Response><responsecode>1</responsecode><message>Upload failed This was not an uploaded form type</message></Response>

Вот код Java

Метод, который использует запросы URL:

public static String doQuery(String loginUrl) throws IOException{

    URL url = new URL(loginUrl);
    HttpURLConnection conn =
          (HttpURLConnection) url.openConnection();
      conn.setRequestMethod("POST");

      if (conn.getResponseCode() != 200) {
        throw new IOException(conn.getResponseMessage());
      }


      InputStream is = conn.getInputStream();
      //Buffer the result into a string
      BufferedReader rd = new BufferedReader(
          new InputStreamReader(is));
      StringBuilder sb = new StringBuilder();
      String line;
      while ((line = rd.readLine()) != null) {
         line = StringEscapeUtils.unescapeHtml4(line); 
        sb.append(line);
      }

      rd.close();
      conn.disconnect();
      System.out.println("The content was :: " + sb.toString());
      return sb.toString();
}

Метод, который должен загрузить:

  public static void testUpload(String seesionToken, String file ) throws IOException{

    String upload = "http://domain.com:8080/razuna/raz1/dam/index.cfm?fa=c.apiupload&sessiontoken="+seesionToken+"&filedata="+file+"&destfolderid=52482BD488DB4AD6887C5C7BF47BD6FC&zip_extract=1" ;
    System.out.println(upload);
    Authenticate.doQuery(upload);
}

После добавления в doQuery: conn.setRequestProperty ("Content-Type", "multipart / form-data");

И изменение RESTFul URL на:

       http://domain.com:8080/razuna/raz1/dam/index.cfm?fa=c.apiupload&sessiontoken="+seesionToken+"&filedata="+files.toURI()+"&destfolderid=52482BD488DB4AD6887C5C7BF47BD6FC&zip_extract=1"

Кажется, обнаруживается, что URL пытается отправить файл, но все еще не может загрузить файл:

        The content was :: <?xml version="1.0" encoding="UTF-8"?><Response><responsecode>1</responsecode><message>Upload failed There was no appropriate FILE found in the upload</message></Response>

Ответы [ 2 ]

1 голос
/ 21 марта 2012

Ваша команда curl загружает файл @ / Users / cpinera / tmp / panda2.jpg.Использование URL-адреса само по себе не поможет, он просто перейдет на страницу, поэтому вы ошиблись, что «это не загруженная форма».

0 голосов
/ 21 марта 2012

Когда вы запускаете curl с параметрами -F, он отправляет HTTP-запрос POST с указанными парами имя-значение, переданными в теле HTTP-запроса.Когда вы обращаетесь к URL с помощью параметров строки запроса, выполняется HTTP GET.Вполне вероятно, что сервер обрабатывает эти два метода запроса по-разному.

Обновите, теперь, когда вы опубликовали некоторый код Java:

Значения в части строки запроса URL используются дляпередать информацию на веб-сервер, который будет обрабатывать запрос.Конечно, этот удаленный сервер не будет знать, что такое C:/path/to/your/file, потому что это путь к файлу на вашей локальной машине.Правильный способ отправки данных этого файла - открыть файл на Java, а затем прочитать его и записать в выходной поток HttpUrlConnection.

Например, см. Фрагмент кода в разделе «Публикация содержимого» в обсуждении документации Android по HttpUrlConnection: http://developer.android.com/reference/java/net/HttpURLConnection.html

...