你确定是走multimpart formdata协议吗?用最普通的post试试:
构建post参数:NSString *post = [NSString stringWithFormat:@"Username=%@&Password=%@",@"username",@"password"]; 创建post body:NSData *postData = [post dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES];post body的长度NSString *postLength = [NSString stringWithFormat:@"%d",[postData length]]; 创建一个request对象:NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init]; 设置请求地址:[request setURL:[NSURL URLWithString:[NSString stringWithFormat:@"http://tqa.bnuz.edu.cn:8088/index.aspx"]]];设置请求方法:[request setHTTPMethod:@"POST"]; 设置请求头:[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];设置请求体:[request setHTTPBody:postData];最后就请求吧:NSURLResponse * response = nil;
NSError * error = nil;
NSData * data = [NSURLConnection sendSynchronousRequest: request
returningResponse:&response
error:&error];
构建post参数:NSString *post = [NSString stringWithFormat:@"Username=%@&Password=%@",@"username",@"password"]; 创建post body:NSData *postData = [post dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES];post body的长度NSString *postLength = [NSString stringWithFormat:@"%d",[postData length]]; 创建一个request对象:NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init]; 设置请求地址:[request setURL:[NSURL URLWithString:[NSString stringWithFormat:@"http://tqa.bnuz.edu.cn:8088/index.aspx"]]];设置请求方法:[request setHTTPMethod:@"POST"]; 设置请求头:[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];设置请求体:[request setHTTPBody:postData];最后就请求吧:NSURLResponse * response = nil;
NSError * error = nil;
NSData * data = [NSURLConnection sendSynchronousRequest: request
returningResponse:&response
error:&error];
解决方案 »
- 想做一个简单的流媒体播放,得如何弄?
- Objective C的copy一般甚麼時候用啊?
- cocos2d-x的CCLabelAtlas
- android真的不适合开发游戏吗?
- Object-C菜鸟求教:消息发送和类指针的区别
- 如何在其他地方获得self.navigationItem.leftBarButtonItem.title 的title值呢?
- objective-c中新建对象的不同方法
- UITableView提高【cell绘制效率】——cell会一半一半地闪烁
- 新人接触IOS,#import NSString的问题
- Cordova BarcodeScannerc插件横屏
- 使用[button sizeToFit]无效
- ios如何提取网页中的信息
但是那个网页是以表单来传输参数的,普通的post也是可以的吗?
而mutlpart formdata则是针对body的一个协议,它通过boundary把各个字段及其对应的值与其他内容分隔开,与普通post相比只是构造的body不一样,也能以表单的方式传输。
其实主要看服务器是以什么样的方式去解析,像你提到的那两个简单参数,是不会用到mutlpart formdata的。
那我打算传输1202020004到http://tqa.bnuz.edu.cn:8088/index.aspx也是直接用post?
那我打算传输1202020004到http://tqa.bnuz.edu.cn:8088/index.aspx也是直接用post?
是post请求,不过他在请求参数里还加上了一些其他参数:你通过浏览器抓到包后,把它传的参数也模拟一份。
那我打算传输1202020004到http://tqa.bnuz.edu.cn:8088/index.aspx也是直接用post?
是post请求,不过他在请求参数里还加上了一些其他参数:你通过浏览器抓到包后,把它传的参数也模拟一份。师傅,可以具体说说怎样捉包吗
那我打算传输1202020004到http://tqa.bnuz.edu.cn:8088/index.aspx也是直接用post?
是post请求,不过他在请求参数里还加上了一些其他参数:你通过浏览器抓到包后,把它传的参数也模拟一份。师傅,可以具体说说怎样捉包吗
利用Safari抓包的话,要先在Safari的设置->高级里把开发者菜单打开,然后到你想抓的页面上,从Develop菜单中选择Start Timeline Recording,下边会出一个窗口,左边有一个红色的记录按钮,此时你从页面上发的请求就会被抓到,通过右边的详情面板可以请求的详细信息。
Chrome也一样,按Command+Option+I打开开发者窗口,选择Timeline就行了。应用程序的包可以通过Wireshark来抓,包括客户端的App(用代理或者开个WiFi让手机来连)。
参数:AUrl:提交的地址
ANameList:参数名列表
AValuesList:参数值列表。要和参数名一一对应//post提交
-(NSString *)HttpPostSubmit:(NSString *)AUrl namelist:(NSMutableArray *)ANameList valueList:(NSMutableArray *)AValuesList{
NSString *url = AUrl;
//分界线的标识符
NSString *TWITTERFON_FORM_BOUNDARY = @"AaB03x";
//根据url初始化request
NSMutableURLRequest* request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:url]
cachePolicy:NSURLRequestReloadIgnoringLocalCacheData
timeoutInterval:10];
//分界线 --AaB03x
NSString *MPboundary=[[NSString alloc]initWithFormat:@"--%@",TWITTERFON_FORM_BOUNDARY];
//结束符 AaB03x--
NSString *endMPboundary=[[NSString alloc]initWithFormat:@"%@--",MPboundary];
//http body的字符串
NSMutableString *body=[[NSMutableString alloc]init];
for (int i=0; i<ANameList.count; i++) {
NSString *name = [ANameList objectAtIndex:i];
NSString *value = [AValuesList objectAtIndex:i];
//添加分界线,换行
[body appendFormat:@"%@\r\n",MPboundary];
//添加字段名称,换2行
[body appendFormat:@"Content-Disposition: form-data; name=\"%@\"\r\n\r\n",name];
//添加字段的值
if (i == ANameList.count-1)
[body appendFormat:@"%@",value];
else
[body appendFormat:@"%@\r\n",value];
}
//声明结束符:--AaB03x--
NSString *end=[[NSString alloc]initWithFormat:@"\r\n%@",endMPboundary];
//声明myRequestData,用来放入http body
NSMutableData *myRequestData=[NSMutableData data];
//将body字符串转化为UTF8格式的二进制
[myRequestData appendData:[body dataUsingEncoding:NSUTF8StringEncoding]];
//加入结束符--AaB03x--
[myRequestData appendData:[end dataUsingEncoding:NSUTF8StringEncoding]];
//设置HTTPHeader中Content-Type的值
NSString *content=[[NSString alloc]initWithFormat:@"multipart/form-data; boundary=%@",TWITTERFON_FORM_BOUNDARY];
//设置HTTPHeader
[request setValue:content forHTTPHeaderField:@"Content-Type"];
//设置Content-Length
[request setValue:[NSString stringWithFormat:@"%d", (int)[myRequestData length]] forHTTPHeaderField:@"Content-Length"];
//设置http body
[request setHTTPBody:myRequestData];
//http method
[request setHTTPMethod:@"POST"];
NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
NSString *dataInfo = [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding];
return dataInfo;
}
那我打算传输1202020004到http://tqa.bnuz.edu.cn:8088/index.aspx也是直接用post?
是post请求,不过他在请求参数里还加上了一些其他参数:你通过浏览器抓到包后,把它传的参数也模拟一份。师傅,可以具体说说怎样捉包吗
利用Safari抓包的话,要先在Safari的设置->高级里把开发者菜单打开,然后到你想抓的页面上,从Develop菜单中选择Start Timeline Recording,下边会出一个窗口,左边有一个红色的记录按钮,此时你从页面上发的请求就会被抓到,通过右边的详情面板可以请求的详细信息。
Chrome也一样,按Command+Option+I打开开发者窗口,选择Timeline就行了。应用程序的包可以通过Wireshark来抓,包括客户端的App(用代理或者开个WiFi让手机来连)。怎样通过代码获取那些参数的初始值?
我明白这个道理,但是一定要手动吗?不可以用过代码获取他的初始值吗?如果它每一次都改变,手动的话就很麻烦,,,如何通过代码获取它的html源码?
简单的说POST和GET只是提交数据方式不同,返回都一样。
你打开百度实际上就是get http://www.baidu.com返回的是百度页面的源文件。
同理,这个函数返回的也就是你POST的页面返回的源文件
我明白这个道理,但是一定要手动吗?不可以用过代码获取他的初始值吗?如果它每一次都改变,手动的话就很麻烦,,,如何通过代码获取它的html源码?
获取它的值就是通过代码访问那个URL地址,然后你就拿到源码了。