2012-11-20 139 views
1
curl -F [email protected]/path/to/index.html -u [email protected] -F 'data={"title":"API V1 App","package":"com.alunny.apiv1","version":"0.1.0","create_method":"file"}' https://build.phonegap.com/api/v1/apps 

我想要使用一個使用HttpClient庫的java程序實現相同的功能。使用java的cURL命令

DefaultHttpClient client = new DefaultHttpClient(); 
HttpHost targetHost = new HttpHost("build.phonegap.com", 443, "https"); 
client.getCredentialsProvider().setCredentials( 
new AuthScope(targetHost.getHostName(), targetHost.getPort(),AuthScope.ANY_REALM), 
new UsernamePasswordCredentials("[email protected]", "abc123")); 

String authToken = "?auth_token=abcdefgh"; 

HttpPost httpPost = new HttpPost("https://build.phonegap.com/api/v1/apps" + authToken); 

String jsonString = "{\"title\":\"API V1 App\",\"create_method\":\"file\"}"; 
MultipartEntity multipartEntity = new MultipartEntity(); 
multipartEntity.addPart(new FormBodyPart("data", new StringBody(jsonString))); 
multipartEntity.addPart("file", new FileBody(new File("C:/Users/Desktop/app.zip"))); 

/*StringEntity entity = new StringEntity(jsonString, "UTF-8"); */ 
httpPost.setEntity(multipartEntity); 

System.out.println("executing request " + httpPost.getRequestLine()); 
HttpResponse httpResponse = client.execute(httpPost); 
HttpEntity entity = httpResponse.getEntity(); 
System.out.println(httpResponse.getStatusLine()); 
if(entity != null){ 
System.out.println(EntityUtils.toString(entity)); 
} 

在上面的代碼中,我只能設置StringEntity或FileEntity但不同時,我認爲這是什麼是需要得到curl命令的功能。

與StringEntity和FileEntity努力之後,我試着用MultipartEntity,但沒有運氣.. 能否請您爲我提供更多的細節,如果可能的例子..

在此先感謝。

回答

0

一個人來實例化MultipartEntity如下:

MultipartEntity multipartEntity = new MultipartEntity(
             HttpMultipartMode.BROWSER_COMPATIBLE 
                 ) ; 

這爲我工作。

默認情況下,MultipartEntity實例化爲HttpMultipartMode.STRICT模式,在javadoc中記錄爲「RFC 822,RFC 2045,RFC 2046兼容」。

可有人介紹了RFC這裏清楚的認識提到的..

非常感謝