1. 程式人生 > >post請求設定body為file

post請求設定body為file

目的與背景

組長安排的一個小任務,就是對接合作方的一個介面,其實也很簡單,就是第一步傳送使用者和密碼請求到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;