同步发送请求模块

同步加载有两种,一个是直接加载方式,另一个是发送标准同步请求后生成页面的方式。

直接方式的实现是requestWithURL:url,这种方案基本上已经很少有人用了。

发送标准同步请求的方式就是通过sendSynchronousRequest这个函数实现。

咱们的这个标准同步请求模块是通过代理来实现,就只贴代码,步贴使用方法了。

chttpSendSynchronousRequest.h文件

#import <Foundation/Foundation.h>

@interface chttpSendSynchronousRequest : NSObject

- (void)sendHttpRequest:(NSString*)sendString : (NSInteger *)resultCode : (NSString **)recvData;
@end

chttpSendSynchronousRequest.m文件

- (void)sendHttpRequest:(NSString*)sendString : (NSInteger *)resultCode : (NSString **)recvData
{

    if(nil == serverUrl) //|| (nil == sendString))
    {
        *resultCode = -1;
        recvData = nil;
        return;
    }

    NSURL *serverNUSUrl = [NSURL URLWithString:serverUrl];

    NSLog(@"%@", sendString);

    NSError *error = nil;
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:serverNUSUrl
                                                           cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:60];

    [request setHTTPMethod:@"POST"];

    [request setValue:@"text.html" forHTTPHeaderField:@"Content-Type"];
    NSString * sendData = sendString;
    NSData *postData = [sendData dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES];

    NSString *postLength = [NSString stringWithFormat:@"%d", [postData length]];
    [request setValue:postLength forHTTPHeaderField:@"Content-Length"];

    NSInputStream *is = [NSInputStream inputStreamWithData:postData];
    [request setHTTPBodyStream:is];

    NSData *nsRecvData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:&error];

    if(nil != error)
    {
        *resultCode = -1;
        recvData = nil;
        return;
    }

    NSString * recvStrData = [[NSString alloc] initWithData:nsRecvData encoding:NSUTF8StringEncoding];

    if(nil == recvStrData)
    {
        *resultCode = -1;
        recvData = nil;
        return;
    }
    NSLog(@"recvStrData[%@]",recvStrData);
    *recvData = recvStrData;
    *resultCode = 0;
    return;
}
@end

通过requestWithURL:url实现直接同步加载图像代码示例:

- (void)loadImageFromURL:(NSURL*)url {
    NSURLRequest* request = [NSURLRequest requestWithURL:url
                                             cachePolicy:NSURLRequestUseProtocolCachePolicy
                                         timeoutInterval:10.0];
    [_data setLength:0];
    _connection = [[NSURLConnection alloc]
                  initWithRequest:request delegate:self];
}

- (void)connection:(NSURLConnection *)theConnection
    didReceiveData:(NSData *)incrementalData {
    NSData * da = [[NSData alloc] initWithData:incrementalData];
    [_data appendData:da];

    LogInfo(@"succeeded  %d byte received", [_data length]);
    NSString* fileName2 = [self filePath:@"image23.jpg"];
    [da writeToFile:fileName2 atomically:YES];
}

- (void)connection:(NSURLConnection *)theConnection didFailWithError:(NSError *)error{
    // 当请求失败时的相关操作;
    [_data setLength:0];
}

- (void)connectionDidFinishLoading:(NSURLConnection*)theConnection {
    LogInfo(@"succeeded  %d byte received", [_data length]);
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-09-30 06:25:48

同步发送请求模块的相关文章

自己实现异步发送请求和图片

异步发送比同步发送请求有不阻塞主线程和支持多线程发送请求的好处. 异步发送请求可以抽象为标准的代理对象,具有使用方便,可扩充性强,只要你足够牛可以写出比第三方控件更牛的发送模块,由于是你自己写的,可以根据自己的意愿对请求的各种细节进行处理.这个异步发送请求处理模块也是对苹果代理具体实现的经典案例. chttpsendAsynchronousRequest.h #import <Foundation/Foundation.h> @protocol chttpsendAsynchronousDel

在requests模块中使用代理发送请求

1. 代理概述 玩爬虫为什么我们不能使用一个固定IP发送请求 你使用一个固定IP发送每秒向对方服务器发送10几个请求,对方认为这样操作不是人干的, 就把你IP给封了 服务器端的人可以根据你IP很快锁定你, 要求你对这种窃取行为赔偿. 代理 正向代理与反向代理 正向代理与反向代理的区别 反向代理: 服务器端知道代理的存在,反向代理是为了保护服务器或负责负载均衡 但是客户端不知道代理的存在的 正向代理: 客户端知道代理的存在,正向代理是为保护客户端,防止追究责任. 但是服务端不知道真实的客户端 2.

ajax对象。同步与异步及ajax发送请求

ajax对象的属性.方法 属性 readyState: Ajax状态码 * 0:表示对象已建立,但未初始化,只是 new 成功获取了对象,但是未调用open方法 1:表示对象已初始化,但未发送,调用了open方法,但是未调用send方法 2:已调用send方法进行请求 3:正在接收数据(接收到一部分),客户端已经接收到了一部分返回的数据 4:接收完成,客户端已经接收到了所有数据 * status :http响应状态码 200代表成功获取服务器端数据 404未找到页面等等…… statusText

多线程与网络之NSURLConnection发送请求

*:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } a { color: #4183C4; } a.absent { color: #cc0000; } a.anchor { display: block; padding-left: 30px; margin-left: -30px; cursor: pointer; position: absolute

向服务器发送请求

向服务器发送请求 1.向服务器发送请求 如需要将请求发送到服务器,我们使用XMLHttpRequest对象的open()和send()方法: xmlhttp.open("GET","test1.txt",true); xmlhttp.send(); 方法解释: (1)open(method,url,async): 规定请求的类型.URL以及是否异步处理请求: method:请求的类型,可以是GET或者POST: url:文件在服务器上的位置: async:true(

iOS开发之Socket通信实战--Request请求模块

实际上在iOS很多应用开发中,大部分用的网络通信都是http/https协议,除非有特殊的需求会用到Socket网络协议进行网络数据传输,这时候在iOS客户端就需要很好的第三方CocoaAsyncSocket来进行长连接连接和传输数据,该第三方地址:https://github.com/robbiehanson/CocoaAsyncSocket,读者可以自行google或者baidu搜索这个库的用法,网上有很多资料,而且用法不难. 在一些对Socket通信使用需求不是很高的应用中,比如需要多个i

学习-【前端】-angularjs基本框架以及向服务器发送请求的方法

昨天写了个跨域的东西,自己琢磨了下,想到这种方式正好也是之前想的混合app如何交互服务器的解决办法.心里还是蛮开心的.今天又花时间把前端客户端部分的框架做了出来,整合的思路是参照node社区移动端的设计方案,把所有controllers和所有services放到一起,不过请求数据未用$resource也没有用原生的$http,而是使用了restangular,用完这个再把配置文件单独整合到一个文件夹里.整个框架看起来都十分的整洁了. 先给个结构图: 因为是由产品驱动的架构,所以最开始没有使用bo

【03】AJAX 向服务器发送请求

AJAX 向服务器发送请求 创建 XMLHttpRequest 对象后,就可以向服务器发送请求了. XMLHttpRequest 对象的 open() 方法和 send() 方法用来向服务器发送请求. 注意:AJAX 向服务器发送的是 http 请求,与我们浏览网页时发送的 http 请求一样.我们可以右键查看当前网页的源代码,由很多 HTML.CSS和JavaScript 组成,如果我们使用 AJAX 请求当前的 URL ,返回的内容是一样的.(魔芋:也就是说ajax发送的,和我们平时输入网址

ajax-向服务器发送请求

ajax-向服务器发送请求 1.将请求发送到服务器,使用XMLHttpRequest对象的 open() 和 send() 方法.     xmlhttp. open(method,url,async) 方法:     method:请求的类型:get 或者 post: url:文件在服务器上的位置(该文件可以是任何类型的文件,比如:.txt,.xml,.asp,.PHP): async: true(异步)或 false(同步)                  注:XMLHttpRequest