1、oauth认证
用户登录时可以使用第三方的账号登录,为了保证账号信息不被泄露,登录时会跳转到第三方的登录界面,
比如腾讯QQ,然后腾讯会返回登陆的结果。
例如通过qq号登陆京东网
http://fanli.qq.com/fanli_connect/qq_login
Fwww.360buy.com&url=http%3A%2F%2Fqq.360buy.com
68dfe17148
判断这个页面的服务器是在那一个公司?
顶级域名 qq.com 顶级域名才真正代表该网站是否真正属于哪家公司。紧邻.com的为顶级域名
二级域名 fanli.qq.com
2、所用到的工具类
commons-codec-1.3.jar 公用的工具类
commons-httpclient-3.1.jar httpclient http请求
commons-logging-1.1.jar 日志的输出
c3p0 jdbc
douban-java-0.2.2-r34.jar 获取服务器数据 xml 格式 解析xml格式数据
gdata-client-1.0.jar
gdata-core-1.0.jar google提供的解析xml的工具
oauth-1.3.jar 用户身份认证的jar包
3、开放平台
开放平台是指软件系统通过公开其应用程序编程接口(API)或函数(function)来使外部的程序可以增加该
软件系统的功能或使用该软件系统的资源,而不需要更改该软件系统的源代码。
网站 暴露出来一个webservice.
游戏大厅, 提供了一些接口.
web游戏 qq偷菜
广义讲 windows操作系统 也是一个开放平台.
核心的api暴露 windows api
android os
豆瓣网站 社交开放式平台
新浪微博
人人网
豆瓣API是豆瓣为第三方开发人员提供的编程接口。
利用豆瓣API,你可以在你的网站或程序中使用豆瓣的数据和功能
什么是服务器的接口 什么是服务器提供的api
客户端通过接口访问服务器的数据 json xml html
实际上的操作
1.url
2.url 获取到一个urlconntection;
3.获取到服务器返回回来的具体数据信息
4.解析我们关心的内容
5.显示界面
使用开放平台的api 第一步
需要申请一个api使用key文件
为了保护豆瓣用户的数据;防止API被滥用或恶意使用,豆瓣要求每个API的使用者申请一个API Key,
而每个API Key唯一标识一个API使用者. 会在规定的时间内限制访问服务器的次数。
黑客, 抓取人人网数据的操作.如果在一分钟内频繁的访问人人网的数据,
服务器根据api 的key 可以把你的客户端的请求给禁用.
使用开放平台的步骤:
申请API KEY和密钥,然后调用doubanservice传入程序名称,API KEY以及密钥,获取到授权的地址,
然后根据授权的地址进行授权,然后打印tokens数组的前两个元素获得令牌和密钥。目的是为了验证应用对
于账号用户的真实性和可靠性。
如果用户不取消授权,accesstoken和tokensercet是不会发生改变的。
4、模拟在浏览器进行登录操作
登录的时候,实际上是向服务器发送一个post信息
创建一个httppost,传入url。创建键值对传入表单中每个节点的内容。
List<NameValuePair>多处用于Java像url发送Post请求。在发送post请求时用该list来存放参数。
然后创建一个表单的实体,用httppost发送实体
再创建浏览器执行post操作
HttpPost httppost = new HttpPost("http://www.douban.com/accounts/login");
//设置http post请求提交的数据
List<NameValuePair> namevaluepairs = new ArrayList<NameValuePair>();
namevaluepairs.add(new BasicNameValuePair("source", "simple"));
UrlEncodedFormEntity entity = new UrlEncodedFormEntity(namevaluepairs,"utf-8");
httppost.setEntity(entity);
// 创建一个浏览器
DefaultHttpClient client = new DefaultHttpClient();
// 完成了用户登陆豆瓣的操作
HttpResponse response = client.execute(httppost);
5、用代码检验是否需要验证码:
jericho.html-3.1.jar是用来解析网页源代码的架包。
通过分析源代码中每个节点的信息来判断。
/**
* 判断是否需要输入验证码
*/
public static String isNeedCaptcha(Context context) throws Exception{
String loginurl = context.getResources().getString(R.string.loginurl);
URL url = new URL(loginurl);
URLConnection conn = url.openConnection();
Source source = new Source(conn);
List<Element> elements = source.getAllElements("input");
for(Element element : elements){
String result = element.getAttributeValue("name");
if("captcha-id".equals(result)){
return element.getAttributeValue("value");
}
}
return null;
}