1.问题:
怎么样解析URL地址?
2.源代码:
package com.fxrj.email.test;
import com.platform.common.constants.OtherSystemBingdingUrl;
import com.platform.common.exception.HttpConnectException;
import com.platform.http.RequestContext;
import org.jsoup.Connection;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import java.io.IOException;
import java.util.Map;
/**
* Created by Administrator on 2017/6/28 0028.
* 测试链接;
*/
public class TestConnectionDemo{
public static void main(String[] args) {
RequestContext requestContext=new RequestContext();
//1、创建请求上下文;请求上下文就是写你需要知道的东西,类似考卷;而与之对应的是response,就是响应,回答,针对你的问题,给出你的回答;(这两个单词容易看混,别看错了)
try{
//1.1根据mobileNumber来得到userid和domain;//注意这里有两个不规范的地方,即,没有驼峰命名法和匈牙利命名法;
String mobileNumber="abc@google.com.cn";//这里是账号信息;
String str[]=mobileNumber.split("@");
String userid=str[0];//abc
String domain=str[1];//google.com.cn
//2、建立连接,准备好接受响应(答案)的容器,一个名为response的实体;
//2.1这里使用Jsoup来建立连接,Jsoup是一个简单方便的解析器;需要传入登录地址;
//2.2需要data()方法添加访问的用户名,密码,登录方式,返回地址,版本信息,域名,验证码等
//2.3执行方法method()方法,是GET,POST,PUT,DELETE,PATCH,HEADER,OPTION,TRACE中的哪种方法;
//2.4执行execute()方法;
Connection.Response response= Jsoup.connect(OtherSystemBingdingUrl.LOGIN_URL)
.data("password","123456")
.data("validateCode","")
.data("returnurl","http://google.login.login.do")
.data("loginType","WEB")
.data("version","version")
.data("passwordType","0")
.data("mobileNumber",mobileNumber)
.data("userid",str[0])
.data("domain",str[1])
.method(Connection.Method.POST)
.execute();
//3、添加cookies注意,cookies是Map格式的键值对,response拿到cookies;
Map<String,String> cookies=response.cookies();
System.out.println("cookies:"+cookies);
//4、从response拿到url地址,拿到需要的sid和r参数,这里要使用response下面url的getQuery方法:
String url = response.url().getQuery();//
System.out.println("URL:"+response.url());//URL:http:/abc@google.com.cn/m.do?sid=6Q18C7MRnQKz4Nt00001&r=46ad37852cc
System.out.println("urlQuery:"+url);//sid=6Q18C7MRnQKz4Nt00001&r=46ad37852cc
String url2[]=url.split("&");
requestContext.globalData("sid",url2[0]);////sid=6Q18C7MRnQKz4Nt00001
requestContext.globalData("r",url2[1]);//r=46ad37852cc
System.out.println(url2[0]);
System.out.println(url2[1]);
}catch (IOException e){
throw new HttpConnectException(e.getCause());
}
}
}
这里,Connection有好多方法,以下是源码中的方法;
Connection url(URL var1);
Connection url(String var1);//获取url(String)
Connection proxy(Proxy var1);//代理服务器,即Proxy服务器,在互联网上的完成跑腿服务。当你在浏览器中设置了某个Proxy服务器之后,由你的浏览器所发出的任何要求,都会被送到Proxy服务器上去,由这台Proxy服务器代为处理。
Connection proxy(String var1, int var2);
Connection userAgent(String var1);//用户代理
Connection timeout(int var1);//设置超时时间上限
Connection maxBodySize(int var1);//最大Body大小;
Connection referrer(String var1);//引荐
Connection followRedirects(boolean var1);//跟随重定向
Connection method(Connection.Method var1);参数传递方法(GET,POST,PUT,DELETE,PATCH打补丁
,HEAD,OPTION,TRACE等)
Connection ignoreHttpErrors(boolean var1);//忽略Http错误(Boolean)
Connection ignoreContentType(boolean var1);//忽略内容
Connection validateTLSCertificates(boolean var1);//验证TLS证书
Connection data(String var1, String var2);//data数据
Connection data(String var1, String var2, InputStream var3);
Connection data(Collection<Connection.KeyVal> var1);
Connection data(Map<String, String> var1);
Connection data(String... var1);
Connection.KeyVal data(String var1);//key-value分布式存储系统查询速度快、存放数据量大、支持高并发,非常适合通过主键进行查询,但不能进行复杂的条件查询。
Connection requestBody(String var1);//请求体
Connection header(String var1, String var2);//header头部,页眉;
Connection headers(Map<String, String> var1);
Connection cookie(String var1, String var2);//cookie,Cookie,有时也用其复数形式 Cookies,指某些网站为了辨别用户身份、进行 session 跟踪而储存在用户本地终端上的数据(通常经过加密),俗称,本地用户身份信息缓存;
Connection cookies(Map<String, String> var1);
Connection parser(Parser var1);//解析器
Connection postDataCharset(String var1);//请求数据字符集,tips:Jsoup只能以默认编码方式(UTF-8)提交参数
Document get() throws IOException;//页面文档获取,获取页面的信息,以Document形式获取;
Document post() throws IOException;//发送文档信息;
Connection.Response execute() throws IOException;//响应执行。添加完参数后,让其开始连接;
Connection.Request request();
Connection request(Connection.Request var1);
Connection.Response response();
Connection response(Connection.Response var1);
这里还枚举了Connection中的一些Method:
public static enum Method {
GET(false),
POST(true),
PUT(true),
DELETE(false),
PATCH(true),
HEAD(false),
OPTIONS(false),
TRACE(false);
private final boolean hasBody;
private Method(boolean hasBody) {
this.hasBody = hasBody;
}
public final boolean hasBody() {
return this.hasBody;
}
}
3.截图:
无
4.总结:
这里面的参数,网址是编的;