[iPhone-APP]基于Socket+Http打造自己的浏览器Demo
2010-03-27 20:47
525 查看
简单讲述基于BSD Socket + Http 协议。打造自己的浏览器。
BSD Socket,不多说的,有机会详细参考网上有很多详细的讲解的。
本例通过组一个Http报文,发送到指定的服务器中,得到相应的返回值。本人使用的是www.baidu.com,作为试验。
1。
下载fiddler,安装。这是一个抓报工具。安装结束,打开fiddler2,打开浏览器。把尽可能访问网络的东西关掉。晴空fiddler2里面纪录,然后浏览器地址栏输入www.baidu.com,进入,之后搜索一个关键字,例如,alexliu,然后看包是如何发送的。 发现使用的是GET方法,关键字通过编码方式转换,然后有如下请求。
is :GET http://www.baidu.com/s?wd=alexliu HTTP/1.1
Host:www.baidu.com
于是自行组一个Header。记得末尾有两个回车换行。“\r\n"
2。
域名解析成IP地址。
struct hostent *host = gethostbyname([theHost UTF8String]);
if(!host)
{
herror("resolv");
return NULL;
}
struct in_addr **list = (struct in_addr **)host->h_addr_list;
NSString *address = [NSString stringWithCString:inet_ntoa(*list[0])];
return address;
3。
通过Socket系统提供的接口,进行发送和接受。
their_addr.sin_family = AF_INET;
their_addr.sin_addr.s_addr = inet_addr(/* 自己解析IP去吧*/);
//80端口
their_addr.sin_port = htons(80);
bzero(&(their_addr.sin_zero), 8);
int conn = connect(sockfd, (struct sockaddr*)&their_addr, sizeof(struct sockaddr));
//连接
if(conn != -1)
{
NSLog(@"Then the conn is not -1!");
NSMutableString* httpContent = [self makeHttpHeader:hostName];
//这个地方Data需要自己把HTTP那个Header进行加工。
ssize_t dataSended = send(sockfd, [data bytes], [data length], 0);
// readBuffer 大小自行定义。
int br = 0;
//receive 需要一直取到定义的大小为止,循环部分按需要的加
br = recv(sockfd, readBuffer, sizeof(readBuffer), 0);
}
4。显示。顺便上2个小图。
首先输入搜索需求
搜索结果太多了,可以滚动,但是返回的仍然是很多乱七八糟的。。要是有个IEDeveloper 或者fireDebug之类的东西就好了。我这个只能显示纯文本。。
5。有了回来的HTTP+XML文件
自行使用好用的Parser 之类的解析,然后再来点控件,显示到控件上面。浏览器就能面世了。。:)
防止盗链,正文要mark
http://alexliu.cnblogs.com
BSD Socket,不多说的,有机会详细参考网上有很多详细的讲解的。
本例通过组一个Http报文,发送到指定的服务器中,得到相应的返回值。本人使用的是www.baidu.com,作为试验。
1。
下载fiddler,安装。这是一个抓报工具。安装结束,打开fiddler2,打开浏览器。把尽可能访问网络的东西关掉。晴空fiddler2里面纪录,然后浏览器地址栏输入www.baidu.com,进入,之后搜索一个关键字,例如,alexliu,然后看包是如何发送的。 发现使用的是GET方法,关键字通过编码方式转换,然后有如下请求。
is :GET http://www.baidu.com/s?wd=alexliu HTTP/1.1
Host:www.baidu.com
于是自行组一个Header。记得末尾有两个回车换行。“\r\n"
2。
域名解析成IP地址。
struct hostent *host = gethostbyname([theHost UTF8String]);
if(!host)
{
herror("resolv");
return NULL;
}
struct in_addr **list = (struct in_addr **)host->h_addr_list;
NSString *address = [NSString stringWithCString:inet_ntoa(*list[0])];
return address;
3。
通过Socket系统提供的接口,进行发送和接受。
their_addr.sin_family = AF_INET;
their_addr.sin_addr.s_addr = inet_addr(/* 自己解析IP去吧*/);
//80端口
their_addr.sin_port = htons(80);
bzero(&(their_addr.sin_zero), 8);
int conn = connect(sockfd, (struct sockaddr*)&their_addr, sizeof(struct sockaddr));
//连接
if(conn != -1)
{
NSLog(@"Then the conn is not -1!");
NSMutableString* httpContent = [self makeHttpHeader:hostName];
//这个地方Data需要自己把HTTP那个Header进行加工。
ssize_t dataSended = send(sockfd, [data bytes], [data length], 0);
// readBuffer 大小自行定义。
int br = 0;
//receive 需要一直取到定义的大小为止,循环部分按需要的加
br = recv(sockfd, readBuffer, sizeof(readBuffer), 0);
}
4。显示。顺便上2个小图。
首先输入搜索需求
搜索结果太多了,可以滚动,但是返回的仍然是很多乱七八糟的。。要是有个IEDeveloper 或者fireDebug之类的东西就好了。我这个只能显示纯文本。。
5。有了回来的HTTP+XML文件
自行使用好用的Parser 之类的解析,然后再来点控件,显示到控件上面。浏览器就能面世了。。:)
防止盗链,正文要mark
http://alexliu.cnblogs.com
相关文章推荐
- iPhone SDK Demo - CF Socket 简介和基于Socket+Http打造自己的浏览器Demo
- 基于mirrorrr搭建的自己的在线代理(http://zfqproxy.appspot.com/)
- 让微信小程序在浏览器和自己的App中运行--自己写的一个开源框架FreeMina(开发中。。)
- 基于Microsoft Graph打造自己的Timeline应用
- MVP+多线程+断电续传 实现app在线升级库 (手把手教你打造自己的lib)
- [置顶] 【一步一个脚印】Tomcat+MySQL为自己的APP打造服务器(3-3)Json数据交互
- 基于wke封装的duilib的webkit浏览器控件,可以c++与js互交,源码及demo下载地址
- 打造自己的“锤子ROM” 特色APP图标随心换
- Android 源码系列之<十一>从源码的角度深入理解AccessibilityService,打造自己的APP小外挂(下)
- 自己动手打造基于 WKWebView 的混合开发框架(一)WKWebView 上手
- 基于IMOOC强力django+杀手级xadmin 打造上线标准的在线教育平台课程的学习(14)——各个App的adminx.py的设置
- 仿某助手,通过浏览器直接打开Android 自己的App 应用程序(支持几乎所有浏览器、app)
- 自己用node.js 搭建APP服务器,然后用AFNetworking 请求 报如下错误:App TransportSecurity has blocked a cleartext HTTP (http://) resource load since it isinsecure. Temporary exceptions can be configured via your app's Info.
- 基于visual c++之windows核心编程代码分析(61)打造自己的Windows输入法
- IOS-22-XMPP(1)官方demo登录报错:iPhoneXMPPAppDelegate: xmppStream:didNotAuthenticate:
- IPhone UC 浏览器基于cookie登录的用户无法退出(无法删除 cookie)问题
- [导入]自己编写QQ挂机软件--基于HTTP的QQ协议之我所见
- 基于Nginx新增实现自己的HTTP模块
- 【转】自己开发的iphone app打包为IPA包的方法
- [转]Android 和 iPhone 浏览器之战,第 2 部分: 为 iPhone 和 Android 构建基于浏览器的应用程序