2019独角兽企业重金招聘Python工程师标准>>> hot3.png

import java.text.MessageFormat;
import java.util.HashMap;
import java.util.Map;import org.apache.http.Header;
import org.apache.http.message.BasicHeader;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;/*** 对网易yeah.net邮箱用户添加转发规则* * @since 2014-6-6 14:52:09*/
public class MailYeahTest {public static final String SESSION_INIT = "http://mail.yeah.net";public static final String LOGIN_URL = "https://mail.yeah.net/entry/cgi/ntesdoor?df=webmailyeah&from=web&funcid=loginone&iframe=1&language=-1&passtype=1&verifycookie=1&product=mailyeah&style=-1&uid=";public static final String RULE_POST_URl = "http://mail.yeah.net/js5/s?sid={0}&func=user:addMailRules";public static final String RULE_LIST_URl = "http://mail.yeah.net/js5/s?sid={0}&func=user:getMailRules&from=nav&group=options-0&id=NaN&action=click";public static final String RULE_NAME = "规则名称";public static final String FORWARD_MAIL = "你要转到的email地址";/*** @param args*/public static void main(String[] args) {HttpClientHelper hc = new HttpClientHelper(true);HttpResult lr = hc.get(SESSION_INIT);// 目的是得到 csrfToken 类似// 拼装登录信息Map<String, String> data = new HashMap<String, String>();String username ;data.put("username", username ="*******@yeah.net");data.put("savelogin", "0");data.put("url2", "http://mail.yeah.net/errorpage/err_yeah.htm");data.put("password", "********");lr = hc.post(LOGIN_URL, data,setHeader());// 执行登录Document doc = Jsoup.parse(lr.getHtml());System.out.println("doc========"+doc);String sessionId=doc.select("script").html().split("=")[2];sessionId = sessionId.substring(0,sessionId.length()-2);System.out.println("sessionId=========="+sessionId);//查询用户的来来信列表中是否包含“***”字样     有则不再进行转发规则的添加data.clear();data.put("var", "<?xml version=\"1.0\"?><object/>");lr = hc.post(MessageFormat.format(RULE_LIST_URl, sessionId),data, setHeaderTORuleList(sessionId));//转发if(!lr.getHtml().contains(RULE_NAME)){data.clear();               data.put("var", "<?xml version=\"1.0\"?><object><array name=\"items\"><object><string name=\"name\">"+RULE_NAME+"</string><boolean name=\"disabled\">false</boolean><boolean name=\"continue\">true</boolean><array name=\"condictions\"><object><boolean name=\"disabled\">false</boolean><string name=\"field\">subject</string><string name=\"operand\">我是好人</string><boolean name=\"ignoreCase\">true</boolean><string name=\"operator\">contains</string></object><object><string name=\"field\">accounts</string><string name=\"operator\">contains</string><array name=\"operand\"><string>"+username+"</string></array></object></array><array name=\"actions\"><object><string name=\"type\">forward</string><string name=\"target\">"+FORWARD_MAIL+"</string><boolean name=\"keepLocal\">true</boolean></object></array></object></array></object>");lr = hc.post(MessageFormat.format(RULE_POST_URl, sessionId),data, setHeaderTORulePost(sessionId));data.clear();data.put("var", "<?xml version=\"1.0\"?><object><array name=\"items\"><object><string name=\"name\">"+RULE_NAME+"</string><boolean name=\"disabled\">false</boolean><boolean name=\"continue\">true</boolean><array name=\"condictions\"><object><boolean name=\"disabled\">false</boolean><string name=\"field\">subject</string><string name=\"operand\">你是坏人</string><boolean name=\"ignoreCase\">true</boolean><string name=\"operator\">contains</string></object><object><string name=\"field\">accounts</string><string name=\"operator\">contains</string><array name=\"operand\"><string>"+username+"</string></array></object></array><array name=\"actions\"><object><string name=\"type\">forward</string><string name=\"target\">"+FORWARD_MAIL+"</string><boolean name=\"keepLocal\">true</boolean></object></array></object></array></object>");lr = hc.post(MessageFormat.format(RULE_POST_URl, sessionId),data, setHeaderTORulePost(sessionId));data.clear();data.put("var", "<?xml version=\"1.0\"?><object><array name=\"items\"><object><string name=\"name\">"+RULE_NAME+"</string><boolean name=\"disabled\">false</boolean><boolean name=\"continue\">true</boolean><array name=\"condictions\"><object><boolean name=\"disabled\">false</boolean><string name=\"field\">subject</string><string name=\"operand\">呵呵</string><boolean name=\"ignoreCase\">true</boolean><string name=\"operator\">contains</string></object><object><string name=\"field\">accounts</string><string name=\"operator\">contains</string><array name=\"operand\"><string>"+username+"</string></array></object></array><array name=\"actions\"><object><string name=\"type\">forward</string><string name=\"target\">"+FORWARD_MAIL+"</string><boolean name=\"keepLocal\">true</boolean></object></array></object></array></object>");lr = hc.post(MessageFormat.format(RULE_POST_URl, sessionId),data, setHeaderTORulePost(sessionId));}System.out.println(lr.getHtml());  //响应信息}public static Header[] setHeader() {Header[] result = {new BasicHeader("User-Agent","Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)"),new BasicHeader("Accept-Encoding","gzip, deflate"),new BasicHeader("Accept-Language","zh-CN"),new BasicHeader("Connection","Keep-Alive"),new BasicHeader("Host","mail.yeah.net"),new BasicHeader("Referer","http://mail.yeah.net/"),new BasicHeader("Accept","text/html, application/xhtml+xml, */*")};return result;}public static Header[] setHeaderTORulePost(String sessionId) {Header[] result = {new BasicHeader("Host","mail.yeah.net"),new BasicHeader("User-Agent","Mozilla/5.0 (Windows NT 6.1; WOW64; rv:29.0) Gecko/20100101 Firefox/29.0"),new BasicHeader("Accept","text/javascript"),new BasicHeader("Accept-Language","zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3"),new BasicHeader("Accept-Encoding","gzip, deflate"),new BasicHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8"),new BasicHeader("Referer","http://mail.yeah.net/js5/main.jsp?sid="+sessionId+"&df=webmailyeah"),new BasicHeader("Connection","Keep-Alive"),new BasicHeader("Pragma","no-cache"),new BasicHeader("Cache-Control","no-cache")};return result;}public static Header[] setHeaderTORuleList(String sessionId) {Header[] result = {new BasicHeader("Host","mail.yeah.net"), new BasicHeader("User-Agent","Mozilla/5.0 (Windows NT 6.1; WOW64; rv:29.0) Gecko/20100101 Firefox/29.0"),new BasicHeader("Accept","text/javascript"),new BasicHeader("Accept-Language","zh-CN"),new BasicHeader("Accept-Encoding","gzip, deflate"),new BasicHeader("Content-Type","application/x-www-form-urlencoded;charset=UTF-8"),new BasicHeader("Referer","http://mail.yeah.net/js5/main.jsp?sid="+sessionId+"&df=webmailyeah"),new BasicHeader("Connection","Keep-Alive"),new BasicHeader("Pragma","no-cache"),new BasicHeader("Cache-Control","no-cache")};return result;}
}-----------------------------------------------------------------------------------------------
import java.io.IOException;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;import org.apache.commons.lang.StringUtils;
import org.apache.http.Header;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.conn.ClientConnectionManager;
import org.apache.http.conn.scheme.Scheme;
import org.apache.http.conn.scheme.SchemeRegistry;
import org.apache.http.conn.ssl.SSLSocketFactory;
import org.apache.http.cookie.Cookie;
import org.apache.http.impl.client.BasicCookieStore;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicHeader;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.protocol.BasicHttpContext;
import org.apache.http.protocol.HttpContext;
/*** HttpClient 封装** @author bangis.wangdf*/
public class HttpClientHelper {private HttpClient       httpclient       = new DefaultHttpClient();private HttpContext      localContext     = new BasicHttpContext();private BasicCookieStore basicCookieStore = new BasicCookieStore();                          // cookie存储用来完成登录后记录相关信息private int              TIME_OUT         = 3;                                              // 连接超时时间public HttpClientHelper() {instance();}/*** 启用cookie存储*/private void instance() {httpclient.getParams().setIntParameter("http.socket.timeout", TIME_OUT * 1000);localContext.setAttribute("http.cookie-store", basicCookieStore);// Cookie存储}/*** @param ssl boolean=true 支持https网址,false同默认构造*/public HttpClientHelper(boolean ssl) {instance();if (ssl) {try {X509TrustManager tm = new X509TrustManager() {public void checkClientTrusted(X509Certificate[] xcs, String string) throws CertificateException {}public void checkServerTrusted(X509Certificate[] xcs, String string) throws CertificateException {}public X509Certificate[] getAcceptedIssuers() {return null;}};SSLContext ctx = SSLContext.getInstance("TLS");ctx.init(null, new TrustManager[] { tm }, null);SSLSocketFactory ssf = new SSLSocketFactory(ctx);ClientConnectionManager ccm = httpclient.getConnectionManager();SchemeRegistry sr = ccm.getSchemeRegistry();sr.register(new Scheme("https", ssf, 443));} catch (Exception e) {e.printStackTrace();}}}/*** @param url* @param headers 指定headers* @return*/public HttpResult get(String url, Header... headers) {HttpResponse response;HttpGet httpget = new HttpGet(url);if (headers != null) {for (Header h : headers) {httpget.addHeader(h);}} else {// 如不指定则使用默认Header header = new BasicHeader("User-Agent","Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1;  .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; InfoPath.2)");httpget.addHeader(header);}HttpResult httpResult = HttpResult.empty();try {response = httpclient.execute(httpget, localContext);httpResult = new HttpResult(localContext, response);} catch (IOException e) {httpget.abort();}return httpResult;}public HttpResult post(String url, Map<String, String> data, Header... headers) {HttpResponse response;HttpPost httppost = new HttpPost(url);String contentType = null;if (headers != null) {int size = headers.length;for (int i = 0; i < size; ++i) {Header h = (Header) headers[i];if (!(h.getName().startsWith("$x-param"))) {httppost.addHeader(h);}if ("Content-Type".equalsIgnoreCase(h.getName())) {contentType = h.getValue();}}}if (contentType != null) {httppost.setHeader("Content-Type", contentType);} else if (data != null) {httppost.setHeader("Content-Type", "application/x-www-form-urlencoded");}List<NameValuePair> formParams = new ArrayList<NameValuePair>();for (String key : data.keySet()) {formParams.add(new BasicNameValuePair(key, (String) data.get(key)));}HttpResult httpResult = HttpResult.empty();try {UrlEncodedFormEntity entity = new UrlEncodedFormEntity(formParams, "UTF-8");httppost.setEntity(entity);response = httpclient.execute(httppost, localContext);httpResult = new HttpResult(localContext, response);} catch (IOException e) {httppost.abort();} finally {}return httpResult;}public String getCookie(String name, String... domain) {String dm = "";if (domain != null && domain.length >= 1) {dm = domain[0];}for (Cookie c : basicCookieStore.getCookies()) {if (StringUtils.equals(name, c.getName()) && StringUtils.equals(dm, c.getDomain())) {return c.getValue();}}return null;}public void pringCookieAll() {for (Cookie c : basicCookieStore.getCookies()) {System.out.println(c);}}
}-----------------------------------------------------------------------------------------------
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.zip.GZIPInputStream;import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;import org.apache.commons.lang.StringUtils;
import org.apache.http.Header;
import org.apache.http.HttpHost;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.conn.ClientConnectionManager;
import org.apache.http.conn.scheme.Scheme;
import org.apache.http.conn.scheme.SchemeRegistry;
import org.apache.http.conn.ssl.SSLSocketFactory;
import org.apache.http.cookie.Cookie;
import org.apache.http.impl.client.BasicCookieStore;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicHeader;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.protocol.BasicHttpContext;
import org.apache.http.protocol.HttpContext;
import org.apache.http.util.EntityUtils;
/*** 对HttpClient返回的结果进一步封装* @author bangis.wangdf**/
public class HttpResult {private static Pattern headerCharsetPattern = Pattern.compile("charset=((gb2312)|(gbk)|(utf-8))", 2);private static Pattern pattern = Pattern.compile("<meta[^>]*content=(['\"])?[^>]*charset=((gb2312)|(gbk)|(utf-8))\\1[^>]*>",2);private String headerCharset;private String headerContentType;private String headerContentEncoding;private List<Header> headers;private String metaCharset;private byte[] response;private String responseUrl;private int statuCode = -1;private static final int BUFFER_SIZE = 4096;public static HttpResult empty() {return new HttpResult();}public String getHeaderCharset() {return this.headerCharset;}public String getHeaderContentType() {return this.headerContentType;}public final List<Header> getHeaders() {return this.headers;}public String getHtml() {try {return getText();} catch (UnsupportedEncodingException e) {}return "";}public String getHtml(String encoding) {try {return getText(encoding);} catch (UnsupportedEncodingException e) {e.printStackTrace();}return "";}public String getMetaCharset() {return this.metaCharset;}public byte[] getResponse() {return Arrays.copyOf(this.response, this.response.length);}public String getResponseUrl() {return this.responseUrl;}public int getStatuCode() {return this.statuCode;}public String getText() throws UnsupportedEncodingException {return getText("");}public String getText(String encoding) throws UnsupportedEncodingException {if (this.response == null){return "";}String encodingStr = encoding;if (StringUtils.isBlank(encoding)){encodingStr = this.metaCharset;}if (StringUtils.isBlank(encoding)){encodingStr = this.headerCharset;}if (StringUtils.isBlank(encoding)){encodingStr = "UTF-8";}return new String(this.response, encodingStr);}private String getCharsetFromMeta() {StringBuilder builder = new StringBuilder();String charset = "";for (int i = 0; (i < this.response.length) && ("".equals(charset)); ++i) {char c = (char) this.response[i];switch (c) {case '<':builder.delete(0, builder.length());builder.append(c);break;case '>':if (builder.length() > 0){builder.append(c);}String meta = builder.toString();if (meta.toLowerCase().startsWith("<meta")){charset = getCharsetFromMeta(meta);}break;case '=':default:if (builder.length() > 0){builder.append(c);}}}return charset;}private String getCharsetFromMeta(String meta) {if (StringUtils.isBlank(meta)){return "";}Matcher m = pattern.matcher(meta);if (m.find()){return m.group(2);}return "";}private void getHttpHeaders(HttpResponse httpResponse) {String headerName = "";String headerValue = "";int index = -1;Header[] rspHeaders = httpResponse.getAllHeaders();for (int i = 0; i < rspHeaders.length; ++i) {Header header = rspHeaders[i];this.headers.add(header);headerName = header.getName();if ("Content-Type".equalsIgnoreCase(headerName)) {headerValue = header.getValue();index = headerValue.indexOf(';');if (index > 0){this.headerContentType = headerValue.substring(0, index);}Matcher m = headerCharsetPattern.matcher(headerValue);if (m.find()){this.headerCharset = m.group(1);}}if ("Content-Encoding".equalsIgnoreCase(headerName)){this.headerContentEncoding = header.getValue();}}}private void getResponseUrl(HttpContext httpContext) {HttpHost target = (HttpHost) httpContext.getAttribute("http.target_host");HttpUriRequest req = (HttpUriRequest) httpContext.getAttribute("http.request");this.responseUrl = target.toString() + req.getURI().toString();}public HttpResult(HttpContext httpContext, HttpResponse httpResponse) {this.headers = new ArrayList<Header>();this.statuCode = httpResponse.getStatusLine().getStatusCode();if (httpContext != null) {getResponseUrl(httpContext);}if (httpResponse != null) {getHttpHeaders(httpResponse);try {if (("gzip".equalsIgnoreCase(this.headerContentEncoding))|| ("deflate".equalsIgnoreCase(this.headerContentEncoding))) {GZIPInputStream is = new GZIPInputStream(httpResponse.getEntity().getContent());ByteArrayOutputStream os = new ByteArrayOutputStream();byte[] buffer = new byte[BUFFER_SIZE];int count = 0;while ((count = is.read(buffer)) > 0){os.write(buffer, 0, count);}this.response = os.toByteArray();os.close();is.close();}else{this.response = EntityUtils.toByteArray(httpResponse.getEntity());}} catch (Exception e) {e.printStackTrace();}if (this.response != null){this.metaCharset = getCharsetFromMeta();}}}private HttpResult() {}
}

转载于:https://my.oschina.net/u/1052562/blog/275195

java httpclient 为邮箱添加来信转发规则相关推荐

  1. SpringCloud--GateWay搭建及路由转发规则介绍

    一. Spring Cloud Gateway Spring Cloud GateWay 是 Spring Cloud 的⼀个全新项⽬,⽬标是取代 Netflix Zuul,它基于 Spring5.0+ ...

  2. 关于TP-LINK宽带路由器上的“转发规则”功能用途及设置办法

    关于TP-LINK宽带路由器上的"转发规则"功能用途及设置办法 现在TP-LINK的家用宽带路由器由于价格便宜,性能也还过的去,市场占有率相当高,TP-LINK的家用路由器里有项功 ...

  3. mac自带邮箱添加邮箱_如何在Mac上的Mail中创建或删除邮箱

    mac自带邮箱添加邮箱 The Mail app for macOS has the useful feature of user-created mailboxes that function as ...

  4. nginx proxy_pass转发规则解析

    综述 nginx官方网站讲解proxy_pass时,只给了规则的说明,并没有给出具体的示例辅助理解.对于英语不太好的人,理解起来真的很头痛,只能通过测试来验证对英文意思的猜测. nginx对proxy ...

  5. 论文阅读八:SDN 交换机转发规则 TCAM 存储优化综述

    摘要:SDN将传统网络的控制平面和数据平面解耦,通过控制平面的控制器灵活地对网络进行管理,目前应用最广泛的控制协议是OpenFlow.三态内容寻址存储器(TCAM)查找速度快.支持三态掩码存储,在SD ...

  6. qq邮箱 添加 gmail_将您的Gmail添加到Windows Live Mail

    qq邮箱 添加 gmail The cool thing with email these days is you can pretty much use any client you want an ...

  7. java设置httpheaders_HttpClient 请求添加Header头部信息

    HTTP消息可以包含许多描述消息属性的标头,例如内容长度,内容类型,授权等. HttpClient提供了检索,添加,删除和枚举标头的方法. 在下面的教程中,我们将演示如何将自定义HTTP头添加到Htt ...

  8. 计算机网络实践之元气骑士公网异地联机(三) 完善转发机的转发规则

    计算机网络实践之元气骑士公网异地联机(三) 完善转发机的转发规则 前言 在上一篇中,我通过表格对转发机的监听端口和转发逻辑进行了简短的描述. 转发机 监听端口 主机A 23333.8888.8888端 ...

  9. 纯Java实现网易邮箱发送邮件

    纯Java实现网易邮箱发送邮件 基于Java开发的邮件发送程序.因为使用的是网易的smtp服务器,所以发件人邮箱要求网易邮箱.博主亲测126邮箱和163邮箱有效,yeah邮箱没有测试. 前提准备 需要 ...

最新文章

  1. 从未在一起更让人遗憾_明明是真爱,却又不能在一起
  2. 两周后上线,老板你在开玩笑吗?
  3. installation of igraph for python2.7
  4. 孤岛营救与汽车加油行驶问题
  5. Server 2008 Core/服务器核心环境安装SQL 2008 方法
  6. Gartner市场分析报告显示2010年全球安全软件市场增长12%
  7. lintcode-514-栅栏染色
  8. 电脑技巧:电脑常用快捷键大全,值得收藏!
  9. Java提高班(五)深入理解BIO、NIO、AIO
  10. 【多线程】CountDownLatch 和 CyclicBarrier:如何让多线程步调一致?
  11. 大物实验-直接测量量不确定度计算器 开发备忘录
  12. 微信小程序:宝宝起名神器
  13. 搜狗输入法android德语,教你用搜狗输入法打出法语字符
  14. logback日志集成
  15. 软件无线电(SDR)及高频/高速(RF/Hi-Speed)标准集
  16. java连接twitter登录,android中接入twitter进行第三方登录
  17. 关于MySQL加载驱动错误问题。
  18. Caused by : java.lang.NoSuchMethodError
  19. poj 1845 Sumdiv (等比求和+逆元)
  20. 洛谷 P3807 【模板】卢卡斯定理/Lucas 定理

热门文章

  1. 论文翻译-机器翻译:Attention
  2. mac下java配置填坑
  3. sonar做代码检测时如何忽略一些代码文件
  4. F5 任命 Ben Gibson 担任首席营销官
  5. LRUCache 具体解释
  6. DotNet指定文件显示的尺寸
  7. ubuntu内窗口最大最小化
  8. C++11中正則表達式測试
  9. strlen() sizeof()
  10. 语音合成(文字转语音)工具大全