post請求設定body為file
阿新 • • 發佈:2018-12-07
目的與背景
組長安排的一個小任務,就是對接合作方的一個介面,其實也很簡單,就是第一步傳送使用者和密碼請求到token,第二步,用這個token和目標JPG檔案傳送到目標伺服器,目標伺服器計算好結果後返回來就可以。看著是不是很簡單?
遇到的坑
一、看文件不仔細
本來人家寫的imae的型別是file,但是我依然把他讀取出來轉換了編碼
二、版本部署的問題
目前依然使用的是TttpClient3.1,好多方法都找不到
三、查資料沒有目的性
雖然看了很多部落格,但是在翻的時候沒有很強的目的性,導致在錯誤的地方一直打轉
最後的解決方案
依然是使用的HttpClient,雖然在postman中可以傳送正確的請求,並生成了對應的OkHttpClient程式碼,但是我複製到本地的時候就不能訪問,總說是缺少引數,結合之前看的部落格,瞭解到需要將image放到一個entity中,並且還的把欄位名放進去,於是有了如下的程式碼:
HttpClient HTTP_CLINET = new HttpClient();
PostMethod method = new PostMethod(url);
Part[] parts = {new FilePart("image", new File(sourcePath))};
RequestEntity requestEntity = new MultipartRequestEntity(parts, method.getParams());
method.setRequestEntity(requestEntity);
Header header = new Header();
header.setName("token");
header.setValue(accessToken);
method.setRequestHeader(header);
method.getParams().setParameter(HttpMethodParams.SO_TIMEOUT, 30000);
HTTP_CLINET.getHttpConnectionManager().getParams().setConnectionTimeout (30000);
HTTP_CLINET.getHttpConnectionManager().getParams().setSoTimeout(30000);
HTTP_CLINET.executeMethod(method);
if(method.getStatusCode() == 200) {
String result = method.getResponseBodyAsString();
return result;
}
return null;