我正在开发一个消息传递iPhone应用程序,使用HTTP从客户端向服务器发送和接收数据。
要使客户端与服务器通信,客户端会创建HTTP请求并使用相关参数填充它。
每个客户请求都包含以下参数:
“cmd”(命令)
“clientId”(用于标识客户端的唯一ID)
“一些命令特定数据”(命令的额外数据)
(1)将这些参数添加到HTTP POST请求的正确方法是什么?
到现在为止我做了如下:
- (void)sendTextMessage:(NSString *)text forClient:(NSString *)clientId
{
NSString *url = SERVER_URL;
NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease];
[request setURL:[NSURL URLWithString:url]];
[request setHTTPMethod:@"POST"];
NSMutableData *body = [NSMutableData data];
[body appendData:[[NSString stringWithFormat:@"cmd=%@&clientid=%@&msg=%@",
@"sendmsg",
clientId,
text] dataUsingEncoding:NSUTF8StringEncoding]];
[request setHTTPBody:body];
// send the request...
}
(2)此方法运行正常,但我不确定这应该如何使用HTTP,是否可以使用HTTP正文发送这些参数?
无论如何,因为我说它工作正常,所以我没有遇到问题,直到我添加了在我的应用程序中发送图片的选项... 这使得事情有点复杂,在哪里放置图像以及在哪里放置命令参数字符串?
所以我开始使用ASIHTTPRequest
库,以便在发送图片时轻松实现
现在的问题是,(3)如何处理命令参数?我在哪里添加它们?
我最终将它们添加到URL本身(再次可能不是很好地使用HTTP),另一个问题是我无法将“text”参数添加到URL,因为它有空格。 所以我添加了“text”参数,如下所示:
[request setPostValue:text forKey:@"msgText"];
((4)我甚至不知道它意味着什么?这是添加到HTTP标题?还是正文?)
这是我使用ASIHTTPRequest
发送带有文字的图片的方式:
- (void)sendMsgText:(NSString *)text andImage:(UIImage *)image forClient:(NSString *)clientId
{
NSString *url = SERVER_URL;
// add the command parameters to the url
NSString *cmd = [NSString stringWithFormat:@"cmd=%@&clientid=%@",
@"sendmsg",
clientId];
NSString *newUrl = [NSString stringWithFormat:@"%@?%@", url, cmd];
// create HTTP request
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:[NSURL URLWithString:newUrl]];
// add the text
[request setPostValue:text forKey:@"msgText"];
// add the image
NSData *imageData = UIImageJPEGRepresentation(image, 1.0);
[request addData:imageData withFileName:@"image.jpg" andContentType:@"image/jpeg" forKey:@"photos"];
[request setRequestMethod:@"POST"];
[request setDelegate:self];
[request startAsynchronous];
}
对不起,我很抱歉,最后我有4个问题(粗体文字):
问题1,2是通用HTTP使用问题
问题3,4是具体的ASIHTTPRequest
使用问题