问题一:使用httpClient实现NameValuePair方式的post请求,出现错误“响应状态:HTTP/1.1 400 Bad Request”,打印response的内容,发现参数未传入。
原因:发送的请求缺少头信息。
解决方法:加入如下的头信息
HttpPost httpPost = new HttpPost(path); httpPost.addHeader("Accept","text/javascript, text/html, application/xml, text/xml"); httpPost.addHeader("Accept-Charset", "GBK,utf-8;q=0.7,*;q=0.3"); httpPost.addHeader("Accept-Encoding", "gzip,deflate,sdch"); httpPost.addHeader("Connection", "Keep-Alive"); httpPost.addHeader("Cache-Control", "no-cache"); httpPost.addHeader("Content-Type", "application/x-www-form-urlencoded"); |
问题二:接口返回内容中带有html格式的数据,如下内容,需要获取result中的data-coid的数据进行校验。
{"msg":"succeed","result":{"collectHtml":" <div class=\"collect-item f-fl\" data-coid=\"33628\">\n <a href=\"/detail/favorite/33628\" target=\"_blank\">\n <div class=\"collect-wrap f-fl\">\n <div class=\"collect-title f-toe\">\n <span>API: Edit G list<\/span>\n <\/div>\n <div class=\"collect-image\">\n <img class=\"collect-i\" src=\"\n http://acs.nosdn.127.net/15e4c8419e994e74a60186f8969b266c.jpeg?imageView&type=png&enlarge=1&quality=100&axis=0&thumbnail=190y190\n \">\n <div class=\"collect-number\">1<\/div>\n <\/div>\n <div class=\"collect-guanzhu\">\n <img src=\"/src/image/homePage/guanzhu.jpg?7f14d069d28438c6b7feeab00c2a9448\">\n <span>0人关注<\/span>\n <\/div>\n <\/div>\n <\/a>\n <\/div>\n ","isAll":true},"code":200} |
解决方法:
1. 使用elments
以上数据为http请求的response内容,为json格式,因此将其返回给JSONObject response;
使用JSONObject result = response.getJSONObject("result");获取到result的内容;
String collectHtml = result.getString("collectHtml");获取到collectHtml内容;
使用Jsoup对collectHtml进行分析:
Document doc = Jsoup.parse(collectHtml, "UTF-8"); Elements g_lists = doc.getElementsByClass("collect-item"); String g_list_id = ""; for (Element g_list:g_lists){ g_list_id = g_list.attributes().get("data-coid").trim(); logger.info(g_list_id); } } |
2. 使用select
doc = Jsoup.parse(response, "UTF-8"); setting_nick = doc.select("div.username").text().trim(); logger.info(setting_nick); |