豆瓣开放平台api的坑

最近在接豆瓣的分享,期间碰到了较多的陷阱,一路磕磕碰碰,还好最终都解决了。下面总结下期间耗费了我一天的一个巨坑。。。

第一次使用在使用豆瓣广播api(shuo/v2/statuses/)即碰壁,查找原因后发现最后的“/”必不可少。

那么我们继续:

Java代码 复制代码  收藏代码
  1. MultiThreadedHttpConnectionManager httpConnectionManager = new MultiThreadedHttpConnectionManager();   
  2. HttpClient client = new HttpClient(httpConnectionManager);    
  3. PostMethod postMethod = new PostMethod("https://api.douban.com/shuo/v2/statuses/");   
  4. Part[] parts = new Part[2];   
  5. parts[0] = new StringPart("source","XXXXXXXXX""UTF-8");   
  6. parts[0] = new StringPart("text""ttttt""UTF-8");   
  7.                
  8. File file = new File("D:\\upload.jpg");   
  9. FilePart filePart = new FilePart("image", file.getName(), file,new MimetypesFileTypeMap().getContentType(file), "UTF-8");   
  10. parts[1] = filePart;   
  11.   
  12. MultipartRequestEntity requestEntity = new MultipartRequestEntity(parts, postMethod.getParams());   
  13. postMethod.setRequestEntity(requestEntity);   
  14. postMethod.setRequestHeader("Authorization""Bearer XXXXXX");   
  15. int statusCode = client.executeMethod(postMethod);   
  16.   
  17. String response = new String(postMethod.getResponseBody(), "UTF-8");   
  18. System.out.println("response--->" + response);   
  19. System.out.println("statusCode--->" + statusCode);  
MultiThreadedHttpConnectionManager httpConnectionManager = new MultiThreadedHttpConnectionManager();
HttpClient client = new HttpClient(httpConnectionManager); 
PostMethod postMethod = new PostMethod("https://api.douban.com/shuo/v2/statuses/");
Part[] parts = new Part[2];
parts[0] = new StringPart("source","XXXXXXXXX", "UTF-8");
parts[0] = new StringPart("text", "ttttt", "UTF-8");
			
File file = new File("D:\\upload.jpg");
FilePart filePart = new FilePart("image", file.getName(), file,new MimetypesFileTypeMap().getContentType(file), "UTF-8");
parts[1] = filePart;

MultipartRequestEntity requestEntity = new MultipartRequestEntity(parts, postMethod.getParams());
postMethod.setRequestEntity(requestEntity);
postMethod.setRequestHeader("Authorization", "Bearer XXXXXX");
int statusCode = client.executeMethod(postMethod);

String response = new String(postMethod.getResponseBody(), "UTF-8");
System.out.println("response--->" + response);
System.out.println("statusCode--->" + statusCode);

我用的是httpclient3.1,返回结果为{"msg":"不支持的图片格式","r":0}

怎么办?检查多次代码,尝试调整编码多次后,依旧,宣告失败,上豆瓣api小组上搜索,满眼尽是提问的,官方的回复也很简单:"我们的api没问题,请检查参数Content-Type"。

好吧我怕你了,既然你说你们的api没问题,我拿你们提供的sdk参考下总可以吧。于是 下载sdk,我x,老版本的。attachments方式的,不支持image参数。

灵光一显,没准豆瓣自己官方的android里可以用一定的借鉴意义,反编译之,上 应用汇下载豆瓣广播,使用 apk2java解压,jdgui反编译之。
发现android客户端里使用的是httpclient4。参数设置可我也没什么不同。

你可能感兴趣的:(豆瓣开放平台api的坑)