2013-12-09 91 views
0

我试图将curl'-F'选项的等效项发送到指定的URL。发布到服务器的HttpPost参数返回HTTP 500错误

这是命令看起来像使用卷曲:

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

我相信我在使用了Apache的HttpPost类httpcomponents库正确。

我提供了一个name = value类型的参数。 optionName只是一个字符串,'file'是我本地存储在驱动器上的一个文件(因此@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

代码的秘密解决了,thssssffffff! – CODEBLACK

相关问题