在Android中使用MultipartEntityBuilder时,HttpPost返回错误

我正在尝试查询“ http://www.idmypill.com/api/id/”api ,我收到的JSON字符串是{"results":[],"success":false,"errors":null}这是我的服务处理程序类:

 public String makeServiceCall(String url, int method, String api, byte[] pillImage) { try { // http client DefaultHttpClient httpClient = new DefaultHttpClient(); HttpEntity httpEntity = null; HttpResponse httpResponse = null; // Checking http request method type if (method == POST) { android.os.Debug.waitForDebugger(); HttpPost httpPost = new HttpPost(url); httpPost.setHeader("data = api_key", api); MultipartEntityBuilder builder = MultipartEntityBuilder.create(); builder.addBinaryBody("files = image", pillImage); entity = builder.build(); Log.d("Entity", entity.toString()); httpPost.setEntity(entity); Log.d("post", httpPost.toString()); httpResponse = httpClient.execute(httpPost); Log.d("params", httpResponse.getParams().toString()); } httpEntity = httpResponse.getEntity(); response = EntityUtils.toString(httpEntity); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return response; } 

网站给出的python示例是:

 # highly suggested to use the requests package # http://www.python-requests.org/en/latest/ import requests # read in the image and construct the payload image = open("example.jpg").read() data = {"api_key": "KH8hdoai0wrjB0LyeA3EMu5n4icwyOQo"} files = {"image": open("example.jpg")} # fire off the request r = requests.post("http://www.idmypill.com/api/id/", data = data, files = files) # contents will be returned as a JSON string print r.content 

不知何故,我的发布格式必定是错误的,或者他们是否可能特别需要.jpg图像而不是字节数组? 我不熟悉Python,并且已经在这个问题上苦苦挣扎了一个多星期了,所以任何帮助都会非常感激。

builder.addPart(“file”,new FileBody(new File(filename)));

试试这个而不是仅仅使用addPart中的文件对象

尝试:

  ... MultipartEntityBuilder builder = MultipartEntityBuilder.create(); builder.addTextBody("api_key", api); builder.addPart("image", pillImage); ... 

如果addPart不能用于字节数组(我正在工作,无法测试),那么获取图像文件的名称并执行此操作肯定会有效:

  ... pillImage = "/path/to/the/image.jpg"; //This is the image file name MultipartEntityBuilder builder = MultipartEntityBuilder.create(); builder.addTextBody("api_key", api); File imageFile = new File(pillImage); //Open the image builder.addPart("image", imageFile); ...