post方法相对要复杂一些。首先post方法要设置key和value ,所有的key和value都会拼接成 key1=value1&key2=value2的样式的字符串,然后这个字符串转化为二进制放到 http请求的body中。当请求发送的时候,也就跟随body一起传给服务器。http请求Content-Type设置为:application/x-www-form-urlencoded。这里讲的只是简单的post请求,一般发送文件不会选择这种方式(从技术方面考虑也可以发送文件,就是把文件以 key 和 value的方式放入)。下面我们再讨论一下post发送二进制文件更加普遍的方法。
post发送文件首先网页中的form的enctype设置为multipart/form-data,然后浏览器会把表单中需要提交的项目分隔,并为每个部分加上Content-Disposition(form-data或者file),Content-Type(默认为text/plain),name(控件name)等信息,并加上分割符(boundary)。
若您的请求为get方式,则使用ASIHTTPRequest类来实现您的需求。
如:ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:reqURL];
request.tag = REQTYPE_GET_RECOMMENDDETAIL;
request.timeOutSeconds = 30;
[request setDelegate:self];
[request startAsynchronous];
若您的请求方式为post方式,则使用ASIFormDataRequest类来实现您的需求。
如:- (void) getFileUploadInfo:(NSString*)reqURL
fileSize:(int)fileSize
ftitle:(NSString*)ftitle
{
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:[NSURL URLWithString:reqURL]];
request.tag = REQTYPE_GET_MYSPACEFILETRANSPORTRINFO;
request.timeOutSeconds = 30;
[request setDelegate:self];
[request setPostValue:[NSNumber numberWithInt:fileSize] forKey:@"fileSize"];
[request setPostValue:ftitle forKey:@"title1"];
[request startAsynchronous];
}