首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用HTTP Post发送和接收字符串

使用HTTP Post发送和接收字符串
EN

Stack Overflow用户
提问于 2011-11-08 03:46:57
回答 2查看 2.7K关注 0票数 1

我是Objective-C的新手,我在一个应用程序中工作,我需要使用HTTP Post连接到Java的servlet。

我上网搜索了一下,发现了很多关于NSMutableURLRequest和NSURLConnection的信息。我做了一些测试,现在我可以发送和receiveStrings,但我需要做一些更改,我不知道我该怎么做。

我想使用字符串(完成)向我的Servlet发送一条消息,并且我想停止执行,直到收到来自Servlet的响应(这是我的问题)。我不能停止执行,我不知道该怎么做。

这是我的代码:

代码语言:javascript
复制
- (NSString *)sendPostRequest: (NSString*)stringToSend {

//URL en formato String
NSString *urlString = @"http://192.168.1.1:8080/Servlet/ListenerServlet";

//Armo el Body con los Datos a enviar
NSMutableString* requestBody = [[NSMutableString alloc] init];
[requestBody appendString:stringToSend]; 

//Creo el Request
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];

//Creo el Objecto con la URL dentro
NSURL *url = [NSURL URLWithString: [NSString stringWithString:urlString]];

//Seteo la URL al Request
[request setURL:url];

//Armo los Datos a Enviar
NSString* requestBodyString = [NSString stringWithString:requestBody];
NSData *requestData = [NSData dataWithBytes: [requestBodyString UTF8String] length: [requestBodyString length]];

//Seteo el Metodo de Envio
[request setHTTPMethod: @"POST"];

//Seteo los Datos a Enviar
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"content-type"];
[request setHTTPBody: requestData];

//Creo la Conexion y automaticamente se envia
[[NSURLConnection alloc] initWithRequest:request delegate:self];

[requestBody release];  
[request release];  

return @"";
}

有人能帮帮我吗?

感谢并为我糟糕的英语感到抱歉

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-11-16 03:03:18

最后,我使用NSMutableURLRequest和NSURLConnection以及sendSynchronousRequest使其正常工作。

下面是使用的代码:

代码语言:javascript
复制
- (NSString*) sendPostRequest:(NSString *)stringToSend{

NSString *urlString = [self serverURL];

NSURL *url = [NSURL URLWithString: urlString];

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];

[request setHTTPMethod:@"POST"];

//set headers

[request addValue:@"Content-Type" forHTTPHeaderField:@"application/x-www-form-urlencoded"];

[request addValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];

[request setHTTPBody:[stringToSend dataUsingEncoding:NSASCIIStringEncoding]];

[request setTimeoutInterval:90]; // set timeout for 90 seconds

NSURLResponse **response = NULL;

NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:response error:nil];

NSString *responseDataString = [[NSString alloc] initWithData:responseData encoding:NSASCIIStringEncoding];

NSLog(@"Response %@", responseDataString);

return responseDataString;

}

票数 1
EN

Stack Overflow用户

发布于 2011-11-08 04:11:25

您正在尝试以同步方式使用异步应用程序接口(NSURLRequest)。使用委托模式使NSURLRequest在后台工作。您启动一个请求,当数据可用或连接完成时,该请求调用其委托上的委托方法。

你应该重新调整你的应用程序,这样它才能这样工作。网络操作可能需要很长时间,除非迫不得已,否则您不应该暂停用户的操作。

如果您必须停止您的应用程序,直到网络操作完成,您应该设置某种类型的停止/恢复功能来禁用您的UI,而不是占用主线程。

jbat100建议使用ASIHTTPRequest。它可能是过度杀伤力,也是异步工作的,并且已经被它的作者抛弃了。我想说的是,如果你需要使用网络库,你应该去看看AFNetworking。再说一次,可能是过度杀伤力,肯定是异步的,但积极维护并使用基于块的接口。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8041680

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档