【问题标题】:Curl Object to URL Generation卷曲对象到 URL 生成
【发布时间】:2012-03-21 07:21:01
【问题描述】:

我有想要调用的网络服务:

以下 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

但我生成为用于访问 RESTFul API 的 HttpURLConnection 的等效 URL 没有:

 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>

【问题讨论】:

  • 根据您的回答,看起来您实际上是在尝试编写执行特定 REST API 功能的 Java 代码。但是,您的问题中没有任何内容表明这一点,并且您没有发布任何显示您当前正在尝试的代码。
  • 感谢Jason的回复,我已经添加了代码!!

标签: java php curl restful-url


【解决方案1】:

您的 curl 命令正在上传文件 @/Users/cpinera/tmp/panda2.jpg。单独使用 URL 不会,它只会访问页面,因此您的错误是“这不是上传的表单”。

【讨论】:

【解决方案2】:

当您使用 -F 参数运行 curl 时,它会发送一个 HTTP POST 请求,其中包含在 HTTP 请求正文中传递的指定名称-值对。当您使用查询字符串参数访问 URL 时,会执行 HTTP GET。似乎服务器处理这两种请求方法的方式不同。

更新,现在您已经发布了一些 Java 代码:

URL 的查询字符串部分中的值用于将信息传达给将处理请求的 Web 服务器。当然,这个远程服务器不会知道C:/path/to/your/file 是什么,因为这是本地机器上文件的路径。发送此文件数据的正确方法是用 Java 打开文件,然后读取它并将其写入HttpUrlConnection 的输出流。

例如,请参阅 Android 文档对HttpUrlConnection 的讨论中“发布内容”下的代码 sn-p:http://developer.android.com/reference/java/net/HttpURLConnection.html

【讨论】:

  • 感谢您的快速回复。我尝试设置为 POST 不起作用:( HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("POST");
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-12-29
  • 2019-11-02
  • 1970-01-01
  • 1970-01-01
  • 2021-02-17
  • 2016-01-18
  • 2014-05-29
相关资源
最近更新 更多