发送同步请求模块

简介: 发送同步请求模块

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

直接方式的实现是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]);
}
目录
相关文章
|
2月前
自己实现异步发送请求和图片
自己实现异步发送请求和图片
21 0
|
2月前
|
前端开发 网络协议 JavaScript
如何在前端实现WebSocket发送和接收TCP消息(多线程模式)
请确保在你的服务器端实现WebSocket的处理,以便它可以接受和响应前端发送的消息。同时,考虑处理错误情况和关闭连接的情况以提高可靠性。
87 0
axios发送请求几种方式
axios发送请求几种方式
150 0
|
Linux
设置socket接收和发送超时的一种方式
设置socket接收和发送超时的一种方式
610 0
|
消息中间件 域名解析 负载均衡
ZMQ中请求-应答模式的可靠性设计
ZMQ中请求-应答模式的可靠性设计
ZMQ中请求-应答模式的可靠性设计
|
编解码 JSON 网络安全
在发起网络请求时可能会需要对URLString进行编码
在发起网络请求时可能会需要对URLString进行编码
90 0
在发起网络请求时可能会需要对URLString进行编码
|
数据挖掘 Java
封装,分用、客户端服务器以及请求响应
封装,分用、客户端服务器以及请求响应
103 0
封装,分用、客户端服务器以及请求响应
|
消息中间件 缓存 RocketMQ
客户端发起拉取消息请求|学习笔记
快速学习客户端发起拉取消息请求
126 0
客户端发起拉取消息请求|学习笔记
|
移动开发 网络协议 测试技术
服务器循环接收客户端消息|学习笔记
快速学习服务器循环接收客户端消息
117 0
服务器循环接收客户端消息|学习笔记
如何判断请求是否发送成功以及获取请求中的数据
如何判断请求是否发送成功以及获取请求中的数据
702 0
如何判断请求是否发送成功以及获取请求中的数据