Home  >  Q&A  >  body text

ios - 服务器那边的请求的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了 该怎么弄

天蓬老师天蓬老师2712 days ago1005

reply all(2)I'll reply

  • 巴扎黑

    巴扎黑2017-04-17 12:04:15

    I wrote a category to set 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
    

    reply
    0
  • 大家讲道理

    大家讲道理2017-04-17 12:04:15

    AF provides an API for form requests

    - (NSMutableURLRequest *)multipartFormRequestWithMethod:(NSString *)method
                                                  URLString:(NSString*)URLString
                                                 parameters:(NSDictionary*)parameters
                                  constructingBodyWithBlock:(void (^)(id <AFMultipartFormData> formData))block
    

    reply
    0
  • Cancelreply