服务器那边的请求的content-tpye是multipart/form-data,我要怎么发送数据去请求?用afnetworking


如题啊
该怎么弄?

之前用asi的时候是这样的


 NSDictionary *sinaDBDictionary = [sinaDBArray objectAtIndex:0];
        NSString *accessTokenKey = [sinaDBDictionary objectForKey:@"AccessTokenKey"];
        NSString *wbUid = [sinaDBDictionary objectForKey:@"UserIDKey"];

        NSString *boundary = @"14745591349540787582088777204";


        //设置请求体中内容
        NSMutableString *bodyString = [NSMutableString string];
        [bodyString appendFormat:@"-----------------------------%@\r\n", boundary];
        [bodyString appendString:@"Content-Disposition: form-data; name=\"accessToken\"\r\n"];
        [bodyString appendString:@"\r\n"];
        [bodyString appendString:accessTokenKey];
        [bodyString appendString:@"\r\n"];
        [bodyString appendFormat:@"-----------------------------%@\r\n", boundary];
        [bodyString appendString:@"Content-Disposition: form-data; name=\"wbUid\"\r\n"];
        [bodyString appendString:@"\r\n"];
        [bodyString appendString:wbUid];
        [bodyString appendString:@"\r\n"];
        [bodyString appendFormat:@"-----------------------------%@--\r\n",boundary];

        NSMutableData *bodyData = [[NSMutableData alloc]initWithLength:0];
        NSData *bodyStringData = [bodyString dataUsingEncoding:NSUTF8StringEncoding];
        [bodyData appendData:bodyStringData];

        NSString *len = [NSString stringWithFormat:@"%d",[bodyData length]];

        NSString *s = [NSString stringWithFormat:@"multipart/form-data; boundary=---------------------------%@", boundary];


        NSString *url = @"屏蔽屏蔽屏蔽屏蔽掉";
        ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL: [NSURL URLWithString: url]];
        request.defaultResponseEncoding = NSUTF8StringEncoding;
        request.useCookiePersistence = YES;
        [request setRequestMethod:@"POST"];
        [request addRequestHeader:@"Content-Type" value:s];
        [request addRequestHeader:@"Content-Length" value:len];
        [request setPostBody:bodyData];
        [request startSynchronous];

        NSError *error = request.error;
        if (!error) {
           // NSLog(@"%@",[request responseString]);
        }else{
           // NSLog(@"%@",[[request error]localizedDescription]);
        }

真的是好复杂啊

然后现在要转为afn了 该怎么弄

ios afnetworking2.0 iphone objective-c

fruit 10 years, 11 months ago

自己写了个类目来设置request:


 //
//  NSMutableURLRequest+FormData.m
//  Secrets
//
//  Created by ysq on 14-1-28.
//  Copyright (c) 2014年 ysq. All rights reserved.
//

#import "NSMutableURLRequest+FormData.h"

@implementation NSMutableURLRequest (FormData)



+(NSString *)boundaryData{
    return @"12436041281943726692693274280";
}
-(void)setFormData:(NSDictionary *)formData{

    NSString *boundary = [NSMutableURLRequest boundaryData];

    //设置请求体中内容
    NSMutableString *bodyString = [[NSMutableString alloc]init];


    for (int i=[[formData allKeys]count]-1; i>=0; i--) {

        NSString *key = [formData allKeys][i];
        NSString *value = [formData allValues][i];
        if ([key isEqualToString:@"accessToken"]) {
            value = [value substringToIndex:32];
        }

        [bodyString appendFormat:@"-----------------------------%@\r\nContent-Disposition: form-data; name=\"%@\"\r\n\r\n%@\r\n",boundary,key,value];
    }

    [bodyString appendFormat:@"-----------------------------%@--\r\n", boundary];


    NSMutableData *bodyData = [[NSMutableData alloc]initWithLength:0];
    NSData *bodyStringData = [bodyString dataUsingEncoding:NSUTF8StringEncoding];
    [bodyData appendData:bodyStringData];

    NSString *contentLength = [NSString stringWithFormat:@"%d",[bodyData length]];

    NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=---------------------------%@", boundary];



    [self setValue:contentType forHTTPHeaderField:@"Content-Type"];
    [self setValue:contentLength forHTTPHeaderField:@"Content-Length"];
    [self setHTTPBody:bodyData];
    [self setHTTPMethod:@"POST"];

}



@end

新藤·千寻 answered 10 years, 11 months ago

Your Answer