终于算是熬到了礼拜五了,写了一天的文档,都快疯掉了。
在前一篇文章中我们已经完成了登录操作,现在我们就继续登录之后的操作,比如创建Alert,修改Alert,删除Alert。这里的操作基本上都是差不多的,所以我们就简单说下创建Alert。
创建Alert也同样是发送POST请求。所有的操作基本上都和之前的登录操作差不多,获取
HTTP POST地址,添加HTTP Header,然后发送请求。唯一不同的地方在于,我们需要将之前登录后的Cookies信息也同时传过去,只有这样,对方服务器才会认为模拟的帐号是已经登录的。
在HttpClient3.X中,我们还需要手动的处理Cookies的问题,但是在HttpClient4.X中只要我们进行简单的设置,就能够自动处理Cookies的问题。
class="java" name="code">hc.getParams().setParameter(ClientPNames.COOKIE_POLICY, CookiePolicy.BEST_MATCH);
如果使用的是4.3或者之后的
版本,建议不是用CookiePolicy.BEST_MATCH,CookiePolicy这个类在这个版本之中已经显示被抛弃,建议使用CookieSpecs.BEST_MATCH。
注意的是,Cookies的Policy是在登录之前就应该设置好的。
接下来就是继续设置参数。
List<BasicNameValuePair> formParams = new ArrayList<BasicNameValuePair>();
formParams.add(new BasicNameValuePair("q", alertName));
formParams.add(new BasicNameValuePair("t", resultType));
formParams.add(new BasicNameValuePair("f", frequency));
formParams.add(new BasicNameValuePair("l", "0"));
formParams.add(new BasicNameValuePair("e", mailAddress));
接下来创建经过URL
编码的参数实体,并创建POST请求实体。
HttpEntity entity = new UrlEncodedFormEntity(formParams, "UTF-8");
HttpPost request = new HttpPost(CommonConst.URL_ALERT_CREATE);
request.setEntity(entity);
然后就可以执行请求了,这些基本都和第一篇讲的差不多。
HttpResponse hr = hc.execute(request, context);
然后我们就能够在Alert的管理界面中看到Alert添加成功了。
最后还有一点需要注意的就是,每一次请求完要记得将请求处理掉,否则再次发送请求是将有可能抛出
错误。一旦调用了consume方法,就会将这个Entity所持有的所有资源全部释放并归还给Connection对象给HttpClient,同时也将底层所使用的各种输入输出流给关闭了。这样子的话,就有资源去处理其他请求。
EntityUtils.consume(hr.getEntity());
在这里这种写法也是不安全的,因为HttpClient并无法保证getEntity不会返回null。
That's all.
希望这两篇对大家有所帮助。
Note:
同步新浪博客