![](/img/trans.png)
[英]How to convert curl call with "-i --upload-file" into java Unirest or any other http request?
[英]How to convert this curl request to Http post request for file upload in java?
以下是我的卷曲請求:
curl -X POST --data-urlencode 'data1@/Users/Documents/file.csv' http://localhost:8000/predict
以下是我的等效Java實現。
String filePath = inputFilePath;
String url = inputUrl;
File file = new File(filePath);
CloseableHttpClient httpClient = HttpClients.createDefault();
HttpPost uploadFile = new HttpPost(inputUrl);
uploadFile.addHeader("content-type", "application/x-www-form-urlencoded;charset=utf-8");
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
FileBody fileBody = new FileBody(new File(inputFilePath));
HttpEntity reqEntity = MultipartEntityBuilder.create()
.addPart("data1", fileBody)
.build();
uploadFile.setEntity(reqEntity);
CloseableHttpResponse response = null;
try {
response = httpClient.execute(uploadFile);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
我正在嘗試從Java HTTP帖子中調用我的R Rest API端點。
#* @post /predict
mypredict <- function(data1) {
print(data1)
}
(1)我等效的Java HTTP Post請求正確嗎? (2)我可以使用curl命令調用R rest端點。 但是由於某種原因,當我通過Java代碼發送POST請求時,我看到data1沒有作為發布請求的一部分傳遞。 我在R中看到此錯誤。
<simpleError in print(data1): argument "data1" is missing, with no default>
我覺得我的Java等效curl實現是錯誤的。 有人可以幫忙嗎?
您可以指定內容類型application/x-www-form-urlencoded
(就像在這種情況下curl一樣),但是要提供與multipart/form-data
相對應的根本不同的實際主體(實體)。 而是使用URLEncodedFormEntity
包含(對於您的情況)一個NameValuePair
,如下所示:
byte[] contents = Files.readAllBytes (new File(filepath).toPath());
List<BasicNameValuePair> list = new ArrayList<BasicNameValuePair>();
list.add(new BasicNameValuePair("data1", new String(contents,charset));
uploadFile.setEntity(new UrlEncodedFormEntity (list));
而且您不需要addHeader("content-type",...)
因為設置實體會自動提供content-type標頭(和content-length)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.