iOS开发 如何php 判断请求类型网络请求是否开启了代理

您所在的位置: &
iOS-NSURLConnection网络请求,与服务器交互的请求注意点和实现方式
时间: 编辑:限量版©爱 来源:Cnblogs
NSURLConnection
前面我们学习过了多线程的诸多知识,现在该学习网络,学习网络少不了的是发送网络请求,跟服务器进行交互。在iOS中,发送网络请求可以使用NSURLConnection类
使用步骤:
1、创建一个NSURL对象,设置请求路径
这没什么好说的,我们可以将字符串变成URL,也可以直接设置URL,例如:
//这里对字符串进行的处理是因为URL里面不支持中文,而进行的百分号变换,将中文变成百分号格式
NSString *urlStr = [@&http://120.25.226.186:32812/login?username=123&pwd=123& stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSURL *url = [NSURL URLWithString:urlStr];
2、传入NSURL创建一个NSURLRequest对象,设置请求头和请求体等
可以直接设置请求对象,用NSURLRequest,但是这样不能对请求进行更细致的设置
NSURLRequest *request = [NSURLRequest requestWithURL:url];
要进行更细致的设置,如请求方式,请求头等的设置,只能使用NSURLRequest的子类NSMutableURLRequest:
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
request.HTTPMethod = @&POST&;
NSString *bodyStr = @&username=123&pwd=123&;
request.HTTPBody = [bodyStr dataUsingEncoding:NSUTF8StringEncoding];
我们一共可以设置的请求属性如下表示:
设置请求超时等待时间(超过这个时间就算超时,请求失败)
- (void)setTimeoutInterval:(NSTimeInterval)
设置请求方法(比如GET和POST)
- (void)setHTTPMethod:(NSString *)
设置请求体
- (void)setHTTPBody:(NSData *)
设置请求头
- (void)setValue:(NSString *)value forHTTPHeaderField:(NSString *)
####3、使用NSURLConnection发送请求(2种方式,各有不同)
3.1发送同步请求
+ (NSData *)sendSynchronousRequest:(NSURLRequest *)request returningResponse:(NSURLResponse **)response error:(NSError **)
第一个参数: NSURLRequest,包含了需要请求的地址, 以及请求头
第二个参数: 当服务器返回数据之后, 就会将数据赋值给第二个参数(响应头)
第三个参数: 错误信息
会阻塞主线程,会返回数据给NSURLConnection,默认是GET请求
3.2异步请求
根据对服务器返回数据的处理方式的不同,又可以分为2种
1、block回调方式的异步
+ (void)sendAsynchronousRequest:(NSURLRequest*) request queue:(NSOperationQueue*) queue completionHandler:(void (^)(NSURLResponse* response, NSData* data, NSError* connectionError))
2、代理的方式异步
- (id)initWithRequest:(NSURLRequest *)request delegate:(id)
+ (NSURLConnection*)connectionWithRequest:(NSURLRequest *)request delegate:(id)
- (id)initWithRequest:(NSURLRequest *)request delegate:(id)delegate startImmediately:(BOOL)startI
在startImmediately = NO的情况下,需要调用start方法开始发送请求
成为NSURLConnection的代理,要遵守NSURLConnectionDataDelegate协议
NSURLConnectionDataDelegate协议中的代理方法
开始接收到服务器的响应时调用
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)
接收到服务器返回的数据时调用(服务器返回的数据比较大时会调用多次)
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)
服务器返回的数据完全接收完毕后调用
- (void)connectionDidFinishLoading:(NSURLConnection *)
请求出错时调用(比如请求超时)
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)
创建GET和POST请求的举例,
创建GET请求
NSString *urlStr = [@&http://120.25.226.186:32812/login?username=123&pwd=123& stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSURL *url = [NSURL URLWithString:urlStr];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
创建POST请求
NSString *urlStr = @&http://120.25.226.186:32812/login&;
NSURL *url = [NSURL URLWithString:urlStr];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
request.HTTPMethod = @&POST&;
NSString *bodyStr = @&username=123&pwd=123&;
request.HTTPBody = [bodyStr dataUsingEncoding:NSUTF8StringEncoding];
URL中不能包含中文, 如果包含中文会报错
如果URL中包含中文, 需要对URL中百分号编码
NSString *urlStr = @&http://120.25.226.186:32812/login2?username=小黄人&pwd=520it&type=ON&;
urlStr = [urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSURL *url = [NSURL URLWithString:urlStr];
热门关键字iOS开发工具-如何使用网络封包分析工具Charles,通过配置proxy对http、https、tcp、udp 等协议的请求响应过程交互信息进行分析、判断、解决我们移动开发中的遇到的各种实际问题。
时间: 22:58:46
&&&& 阅读:1421
&&&& 评论:
&&&& 收藏:0
标签:&&&&&&&&&&&&&&&&&&&&&&&&&&&通过该方式同时也可以实现底层网络库AFNetworking及ASIHTTPRequest的代理设置。达到我们开发时的抓包分析及
IP地址指定访问开发/仿真任一台提供API接口服务器的目的。
首先下载Charles并配置我们的开发机iPhone终端的代理IP及Charles配置一下,
1)、取得mac本机的IP地址:如下图中的:192.168.1.106
2)、通过下载的Charles来配置我们的代理服务器:
将我们的开发机iphone终端代理设置成我们mac本的ip地址如下图:
这样我们通过mac本上的Charles代理软件设置及移动终端的代理配置就成功了,
打开Charles请求网易就会发现网络抓包的情况,当我们打开iphone上的app时访问的网络请求都 这时我们通过iphone
以下是我实际应用实例如图:
以上是我们拿网易App请求为例可以分析出以下情况:
&& 1.网易的api接口请求的json等各种数据结构:
&& 2.每个请求接口的url及IP地址,每次http握手交互的request和response信息
&& 3.请求使用协议的各种情况,如请求时间及请求响应大小等。
在实际开发中上面的信息跟分析我们自己的app开发过程基本一致,
有时做为开发人员可以通过该分式分析一下觉得不错的app具体是怎么搞出来借鉴一下看一下我们app的有哪
些地方值得进一步优化。就先说到这儿,希望对大家有帮助下。
标签:&&&&&&&&&&&&&&&&&&&&&&&&&&&原文:http://blog.csdn.net/lgm252008/article/details/
教程昨日排行
&&国之画&&&& &&&&&&
&& &&&&&&&&&&&&&&
鲁ICP备号-4
打开技术之扣,分享程序人生!IOS自带的NSURLRequest超时怎么判断?
[问题点数:40分,结帖人liudi224]
IOS自带的NSURLRequest超时怎么判断?
[问题点数:40分,结帖人liudi224]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
2015年4月 移动开发大版内专家分月排行榜第二
2015年5月 移动开发大版内专家分月排行榜第三2015年3月 移动开发大版内专家分月排行榜第三2014年10月 移动开发大版内专家分月排行榜第三
2015年5月 移动开发大版内专家分月排行榜第一2015年4月 移动开发大版内专家分月排行榜第一2014年9月 移动开发大版内专家分月排行榜第一
2015年3月 移动开发大版内专家分月排行榜第二2014年8月 移动开发大版内专家分月排行榜第二
2011年11月 专题开发/技术/项目大版内专家分月排行榜第二2011年8月 专题开发/技术/项目大版内专家分月排行榜第二
匿名用户不能发表回复!|iOS完美的网络状态判断工具
brave-sailor
大多数App都严重依赖于网络,一款用户体验良好的的app是必须要考虑网络状态变化的.iOSSinger下一般使用Reachability这个类来检测网络的变化.
Reachability
这个是苹果开发文档里面的一个类,官方写的,用来判断网络的变化,包括无网络,wifi,和蜂窝三种情况.Reachability类实际上是苹果公司对SCNetworkReachability API的封装,使用方法比较简单,这里不再介绍.说说它的优缺点:
使用简单,只有一个类,官方还有Demo,容易上手
灵敏度高,基本网络一有变化,基本马上就能判断出来
能够判断有网状态的切换比如2G/3G/4G切换
不能判断路由器本身是否能联网
能否连接到指定服务器,比如国内访问墙外的服务器
有网,但是信号很差,网速很慢,跟没网一样.这时候应该认为无网.
事实上Reachability已经很好了,但是实际上客户端到达服务器需要很多道"关卡",例如路由器,电信服务器,防火墙等.其实说白了就是解决一个问题:客户端是否能够成功访问服务器.这里介绍另外一个官方的类:SimplePing
SimplePing
SimplePing也是官方文档的一个类,目的是ping服务器,可以判断客户端是否可以连接到指定服务器.ping 类似于心跳包功能,隔一段时间就ping下服务器,看是否畅通无阻.因此ping不可能做到及时判断网络变化,会有一定的延迟.可能大家已经猜到了我的思路,没错,把他们两个合在一起.下面说说我的思路:
首先利用Reachability判断设备是否联网,至于能不能连接到服务器用ping来检查
如果Reachability判断为有网,并且ping也判断为有网,那么表示真的有网,否则就是没网.
ping 虽然能够判断客户端到服务器是否畅通,但是由于网络抖动或者网络很弱等原因,可能出现ping失败的情况,解决方案就是加上失败次数限制,超过限制就认为断网了.
2/3/4G切换的时候,Reachability虽然检测到了网络变化,但是类型还是蜂窝移动,不能给出具体的网络类型.这里可以通过获取状态栏上的属性来判断.
&&-&(SGNetworkStatus)netWorkDetailStatus{
&&&&UIApplication&*app&=&[UIApplication&sharedApplication];
&&&&UIView&*statusBar&=&[app&valueForKeyPath:@"statusBar"];
&&&&UIView&*foregroundView&=&[statusBar&valueForKeyPath:@"foregroundView"];
&&&&UIView&*networkView&=&
&&&&for&(UIView&*childView&in&foregroundView.subviews)&{
&&&&&&&&if&([childView&isKindOfClass:NSClassFromString(@"UIStatusBarDataNetworkItemView")])&{
&&&&&&&&&&&&networkView&=&childV
&&&&SGNetworkStatus&status&=&SGNetworkStatusN
&&&&if&(networkView)&{
&&&&&&&&int&netType&=&[[networkView&valueForKeyPath:@"dataNetworkType"]intValue];
&&&&&&&&switch&(netType)&{
&&&&&&&&&&&&case&0:
&&&&&&&&&&&&&&&&status&=&SGNetworkStatusN
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&case&1://实际上是2G
&&&&&&&&&&&&&&&&status&=&SGNetworkStatusU
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&case&2:
&&&&&&&&&&&&&&&&status&=&SGNetworkStatus3G;
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&case&3:
&&&&&&&&&&&&&&&&status&=&SGNetworkStatus4G;
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&case&5:
&&&&&&&&&&&&&&&&status&=&SGNetworkStatusW
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&default:
&&&&&&&&&&&&&&&&status&=&SGNetworkStatusU
&&&&&&&&&&&&&&&&
&&&&return&
可喜的是,即使隐藏了状态栏,判断依然有效!
默认采用host为`www.baidu.com`,别喷我,不是给百度打广告,而是因为百度真的只适合判断有没有网,因为响应真的很快.当然也可以用自己的服务器地址,这样更加真实,万一你家的服务器很渣或者突然crash了也能够完美判断.
判断具体网络类型的时候,实际上用kvc获取了控件的私有属性,根据网上的反应,没有因此被拒的情况,因此不用担心.如果因为这个原因被拒,请联系我第一时间修改.
支持全局通知和代理的方式.默认全局发送通知,如果设置了'delegate'这个属性,那么只有代理会收到通知,不在发送全局通知.如果想两种方式并存,可以新建一个'SGNetObserver'对象.
PS:貌似苹果官方的原话是'调用了系统的私有api会被拒'.
支持模拟器,支持IPv4,IPv6
详细代码在这里: &支持cocoapods,欢迎使用!
最后,如果有什么不对,欢迎大家留言指正.
前言: 在项目开发当中,往往需要利用网络.而用户的网络环境也需要我们开发者去注意,根据不同的网络状态作相应的优化,以提升用户体验. 但通常我们只会判断用户是在WIFI还是移动数据,而实际上,移动数据也 ...
在判断网络状态这个问题上,苹果提供了一个叫Reachability的第三方库,但是这个库并不能真正的检测我们的网络状态,我也是在调试程序的时候发现的.详情可以阅读这个博客http://blog.csd ...
在iOS开发中我们有在各种不同网络状态下测试app运行状态的需求.苹果给我们提供了在模拟器和真机状态下,模拟各种网络状态的软件. 在模拟器中 苹果提供的模拟网络状态的工具官网地址下载该工具需要登录Ap ...
许多联网应用都在开始运行的时候检查当前网络状态,如果没有开启则去开启它,记录一下以前写程序时的网络检查,发现人的记忆力真是有限,总是隔段时间久忘记,所以记录下来是最好的记忆. 我们可以在一开始启动程序 ...
import java.net.InetA import android.app.Aimport android.content.Cimport andro ...
一.Reachability // 监听网络状态改变的通知 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selec ...
网络环境的判断有两种方式 1.Reachability 2.AFNetWorking中 AFNetworkReachabilityManager Reachability步骤 (1)导入Reachab ...
一.数据安全 1.提交用户的隐私数据一定要使用POST请求提交用户的隐私数据GET请求的所有参数都直接暴露在URL中请求的URL一般会记录在服务器的访问日志中服务器的访问日志是黑客攻击的重点对象之一
前言:当应用程序需要访问网络的时候,它首先应该检查设备的网络状态,确认设备的网络环境及连接情况,并针对这些情况提醒用户做出相应的处理.最好能监听设备的网络状态的改变,当设备网络状态连接.断开时,程序也 ...
查询语句: SELECT STUFF ( ( SELECT ',' + --分隔符 KeyID --查询字段 FROM #tmp --查询数据表 WITH(NOLOCK) --查询条件 FOR XML ...
&script src=&{staticurl action=&jquery.js& type=&js&}&&&/scri ...
extern &C& { __declspec(dllexport) int psq_add(int a, int b); } C:\Users\pansq&mkexp my ...
小结: 总体上,python是解释型语言,开源比较好,速度较慢,装逼神器,解释器较常用的是CPython,安装后python进入运行环境 exit()退出 第一个hello world : print ...
class Program { static void Main(string[] args) { Run(); } public static async void Run() { var task ...
一.取地址运算符&(内存地址) C++编译的程序占用的内存分为以下几个部分: 1.栈区:由编译器自动分配释放 ,存放函数的参数值,局部变量的值等.其操作方式类似于数据结构中的栈.与其它分区不同 ...
在body注册一下滑轮事件 &body onload=&win_onload();&&&/body& 然后JS代码如下: function win_onlo ...
默认情况下,struts2是无法处理以.do为后缀的请求url的(默认情况下是.action或者不填,可以参见org.apache.struts2包下的default.properties文件). 但 ...
本例中有使用JQuery. 资料参考:http://www.cnblogs.com/babycool/p/3169058.html 发送的HTML页面代码: &!DOCTYPE html& ...51CTO旗下网站
iOS开发ASIHTTPRequest使用代理连接
本文为大家介绍了iOS开发ASIHTTPRequest使用代理连接的内容,其中包括要求授权的proxy,手动为proxy指定凭据,使用delegate来提供proxy凭据,使用内建的授权对话框(仅适用于iOS)等等内容。
作者:佚名来源:dreamingwish| 14:33
ASIHTTPRequest检测系统的proxy设置并自动将proxy用于request。从1.0.6版本开始,它还支持PAC文件和要求授权的proxy。
默认情况下,ASIHTTPRequest将尝试自动检测proxy设置。当然,你可以看自己手动设置:
&NSURL&*url&=&[NSURL&URLWithString:@&http://www.dreamingwish.com&];&ASIHTTPRequest&*request&=&[ASIHTTPRequest&requestWithURL:url];&[request&setProxyHost:@&192.168.0.1&];&[request&setProxyPort:3128];&&&&[request&setPACurl:[NSURL&URLWithString:@&path/to/test.pac&]];&
要求授权的proxy
OS上,ASIHTTPRequest可以自动检测到要求授权的proxy的凭据(前提是在系统设定中设置好)。在iOS上,ASIHTTPRequest则无法自动检测出授权凭据,所以你要么手动使用delegate来向你的controller或者用户索取合适的凭据,要么让ASIAuthenticationDialog向用户索取凭据。一旦获得了一个有效的proxy凭据,那么该凭据将被存储到keychian中(前提是启用useKeychainPersistence&)并自动重用。
手动为proxy指定凭据
NSURL&*url&=&[NSURL&URLWithString:@&http://www.dreamingwish.com&];&ASIHTTPRequest&*request&=&[ASIHTTPRequest&requestWithURL:url];&[request&setProxyHost:@&192.168.0.1&];&[request&setProxyPort:3128];&&&[request&setProxyUsername:@&bencopsey&];&[request&setProxyPassword:@&password&];&&&[request&setProxyDomain:@&la.la.land&];&
使用delegate来提供proxy凭据
这个特性的工作原理和&&一样,只有一点不同:你的delegate要响应proxyAuthenticationNeededForRequest:函数。
使用内建的授权对话框(仅适用于iOS)
这个特性归功于1.0.8版本的新类ASIAuthenticationDialog 。用来向用户索取凭据来授权webserver或者proxy。
如果你的delegate不响应proxyAuthenticationNeededForRequest:函数,那么默认情况下,ASIHTTPRequest将会显示一个对客户来提示用户输入授权凭据。使用ASIHTTPRequest,开发者不再需要写额外的代码来显示授权对话框,因为默认情况下,ASIHTTPRequest就会显示它。
使用同步request时proxy授权对话框不会显示出来。
如果你不限使用proxy授权对话框,那么你要么实现proxyAuthenticationNeededForRequest:,要么设置shouldPresentProxyAuthenticationDialog
为false(此时你的程序将无法连接到proxy)。如果你要改变对话框的样式,你得继承ASIHTTPRequest类,重写showProxyAuthenticationDialog
来显示你自己的对话框或者ASIAuthenticationDialog 子类.
【编辑推荐】
【责任编辑: TEL:(010)】
大家都在看猜你喜欢
头条头条聚焦热点头条
24H热文一周话题本月最赞
讲师:738821人学习过
讲师:51267人学习过
讲师:83027人学习过
精选博文论坛热帖下载排行
本书详细描述如何在复杂技术项目中使用Scrum,并结合真实的Scrum案例及专家洞识,在简明及高度概括的理论之上更侧重于实践,并不断强调Scru...
订阅51CTO邮刊

我要回帖

更多关于 判断是否是ajax请求 的文章

 

随机推荐