感谢分享

//  ASIFormDataRequestTests.m

//  Part of ASIHTTPRequest -> http://allseeing-i.com/ASIHTTPRequest

//

//  Created by Ben Copsey on 08/11/2008.

//  Copyright 2008 All-Seeing Interactive. All rights reserved.

//

#import "ASIFormDataRequestTests.h"

#import "ASIFormDataRequest.h"

// Used for subclass test

@interface ASIFormDataRequestSubclass : ASIFormDataRequest {}

@end

@implementation ASIFormDataRequestSubclass;

@end

@implementation ASIFormDataRequestTests

-(void)testDefaultMethod

{

ASIFormDataRequest *request = [[[ASIFormDataRequest alloc] initWithURL:[NSURLURLWithString:@"http://wedontcare.com"]] autorelease];

GHAssertTrue([[request requestMethod] isEqualToString:@"POST"], @"Default request method should be POST");

}

- (void)testAddNilKeysAndValues

{

ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:[NSURLURLWithString:@"http://allseeing-i.com/ASIHTTPRequest/tests/empty-post-value"]];

[request setPostValue:nil forKey:@"key1"];

[request setPostValue:@"value2" forKey:@"key2"];

[request setData:nil forKey:@"file1"];

[request setData:[@"hello" dataUsingEncoding:NSUTF8StringEncoding] forKey:@"file2"];

[request startSynchronous];

BOOL success = ([[request responseString] isEqualToString:@"key1: \r\nkey2: value2\r\nfile1: \r\nfile2: hello"]);

GHAssertTrue(success, @"Sent wrong data");

// Test nil key (no key or value should be sent to the server)

request = [ASIFormDataRequest requestWithURL:[NSURL URLWithString:@"http://allseeing-i.com"]];

[request addPostValue:@"value1" forKey:nil];

[request addPostValue:@"value2" forKey:@"key2"];

[request buildPostBody];

NSString *postBody = [[[NSString alloc] initWithData:[request postBody] encoding:NSUTF8StringEncoding] autorelease];

success = ([postBody isEqualToString:@"key2=value2"]);

GHAssertTrue(success, @"Sent wrong data");

}

- (void)testPostWithFileUpload

{

NSURL *url = [NSURL URLWithString:@"http://allseeing-i.com/ASIHTTPRequest/tests/post"];

//Create a 32kb file

unsigned int size = 1024*32;

NSMutableData *data = [NSMutableData dataWithLength:size];

NSString *path = [[self filePathForTemporaryTestFiles] stringByAppendingPathComponent:@"bigfile"];

[data writeToFile:path atomically:NO];

ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];

NSDate *d = [NSDate date];

#if TARGET_OS_IPHONE

NSValue *v = [NSValue valueWithCGRect:CGRectMake(0, 0, 200, 200)];

#else

NSValue *v = [NSValue valueWithRect:NSMakeRect(0, 0, 200, 200)];

#endif

[request setPostValue:@"foo" forKey:@"post_var"];

[request setPostValue:d forKey:@"post_var2"];

[request setPostValue:v forKey:@"post_var3"];

[request setFile:path forKey:@"file"];

[request startSynchronous];

BOOL success = ([[request responseString] isEqualToString:[NSStringstringWithFormat:@"post_var: %@\r\npost_var2: %@\r\npost_var3: %@\r\nfile_name: %@\r\nfile_size: %hu\r\ncontent_type: %@",@"foo",d,v,@"bigfile",size,@"application/octet-stream"]]);

GHAssertTrue(success,@"Failed to upload the correct data (using local file)");

//Try the same with the raw data

request = [[[ASIFormDataRequest alloc] initWithURL:url] autorelease];

[request setPostValue:@"foo" forKey:@"post_var"];

[request setPostValue:d forKey:@"post_var2"];

[request setPostValue:v forKey:@"post_var3"];

[request setData:data forKey:@"file"];

[request startSynchronous];

success = ([[request responseString] isEqualToString:[NSString stringWithFormat:@"post_var: %@\r\npost_var2: %@\r\npost_var3: %@\r\nfile_name: %@\r\nfile_size: %hu\r\ncontent_type: %@",@"foo",d,v,@"file",size,@"application/octet-stream"]]);

GHAssertTrue(success,@"Failed to upload the correct data (using NSData)");

//Post with custom content-type and file name

request = [[[ASIFormDataRequest alloc] initWithURL:url] autorelease];

[request setPostValue:@"foo" forKey:@"post_var"];

[request setPostValue:d forKey:@"post_var2"];

[request setPostValue:v forKey:@"post_var3"];

[request setFile:path withFileName:@"myfile" andContentType:@"text/plain" forKey:@"file"];

[request startSynchronous];

success = ([[request responseString] isEqualToString:[NSString stringWithFormat:@"post_var: %@\r\npost_var2: %@\r\npost_var3: %@\r\nfile_name: %@\r\nfile_size: %hu\r\ncontent_type: %@",@"foo",d,v,@"myfile",size,@"text/plain"]]);

GHAssertTrue(success,@"Failed to send the correct content-type / file name");

//Post raw data with custom content-type and file name

request = [[[ASIFormDataRequest alloc] initWithURL:url] autorelease];

[request setPostValue:@"foo" forKey:@"post_var"];

[request setPostValue:d forKey:@"post_var2"];

[request setPostValue:v forKey:@"post_var3"];

[request setData:data withFileName:@"myfile" andContentType:@"text/plain" forKey:@"file"];

[request startSynchronous];

success = ([[request responseString] isEqualToString:[NSString stringWithFormat:@"post_var: %@\r\npost_var2: %@\r\npost_var3: %@\r\nfile_name: %@\r\nfile_size: %hu\r\ncontent_type: %@",@"foo",d,v,@"myfile",size,@"text/plain"]]);

GHAssertTrue(success,@"Failed to send the correct content-type / file name");

}

// Test fix for bug where setting an empty string for a form post value would cause the rest of the post body to be ignored (because an NSOutputStream won't like it if you try to write 0 bytes)

- (void)testEmptyData

{

ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:[NSURLURLWithString:@"http://allseeing-i.com/ASIHTTPRequest/tests/post-empty"]];

[request setPostValue:@"hello" forKey:@"a_non_empty_string"];

[request setPostValue:@"" forKey:@"zzz_empty_string"];

[request setPostValue:@"there" forKey:@"xxx_non_empty_string"];

[request setShouldStreamPostDataFromDisk:YES];

[request buildPostBody];

[request startSynchronous];

BOOL success = ([[request responseString] isEqualToString:@"a_non_empty_string: hello\r\nzzz_empty_string: \r\nxxx_non_empty_string: there"]);

GHAssertTrue(success,@"Failed to send the correct post data");

}

// Ensure class convenience constructor returns an instance of our subclass

- (void)testSubclass

{

ASIFormDataRequestSubclass *instance = [ASIFormDataRequestSubclass requestWithURL:[NSURLURLWithString:@"http://allseeing-i.com"]];

BOOL success = [instance isKindOfClass:[ASIFormDataRequestSubclass class]];

GHAssertTrue(success,@"Convenience constructor failed to return an instance of the correct class");

}

- (void)testURLEncodedPost

{

ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:[NSURLURLWithString:@"http://allseeing-i.com/ASIHTTPRequest/tests/url-encoded-post"]];

[request setPostValue:@"value1" forKey:@"value1"];

[request setPostValue:@"(%20 ? =)" forKey:@"value2"];

[request setPostValue:@"£100.00" forKey:@"value3"];

[request setPostValue:@"" forKey:@"value4"];

[request setPostValue:@"&??aaa=//ciaoèèè" forKey:@"teskey&aa"];

[request setShouldStreamPostDataFromDisk:YES];

[request setPostFormat:ASIURLEncodedPostFormat];

[request startSynchronous];

BOOL success = ([[request responseString] isEqualToString:@"value1: value1\r\nvalue2: (%20 ? =)\r\nvalue3: £100.00\r\nvalue4: \r\nteskey&aa: &??aaa=//ciaoèèè"]);

GHAssertTrue(success,@"Failed to send the correct post data");

}

- (void)testCharset

{

NSURL *url = [NSURL URLWithString:@"http://allseeing-i.com/ASIHTTPRequest/tests/formdata-charset"];

NSString *testString = @"£££s don't seem to buy me many €€€s these days";

// Test the default (UTF-8) with a url-encoded request

NSString *charset = @"utf-8";

ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];

[request setPostValue:testString forKey:@"value"];

[request startSynchronous];

BOOL success = ([[request responseString] isEqualToString:[NSString stringWithFormat:@"Got data in %@: %@",charset,testString]]);

GHAssertTrue(success,@"Failed to correctly encode the data");

// Test the default (UTF-8) with a multipart/form-data request

request = [ASIFormDataRequest requestWithURL:url];

[request setPostValue:testString forKey:@"value"];

[request setPostFormat:ASIMultipartFormDataPostFormat];

[request startSynchronous];

success = ([[request responseString] isEqualToString:[NSString stringWithFormat:@"Got data in %@: %@",charset,testString]]);

GHAssertTrue(success,@"Failed to correctly encode the data");

// Test a different charset

testString = @"£££s don't seem to buy me many $$$s these days";

charset = @"iso-8859-1";

request = [ASIFormDataRequest requestWithURL:url];

[request setPostValue:testString forKey:@"value"];

[request setStringEncoding:NSISOLatin1StringEncoding];

[request startSynchronous];

success = ([[request responseString] isEqualToString:[NSString stringWithFormat:@"Got data in %@: %@",charset,testString]]);

GHAssertTrue(success,@"Failed to correctly encode the data");

// And again with multipart/form-data request

request = [ASIFormDataRequest requestWithURL:url];

[request setPostValue:testString forKey:@"value"];

[request setPostFormat:ASIMultipartFormDataPostFormat];

[request setStringEncoding:NSISOLatin1StringEncoding];

[request startSynchronous];

success = ([[request responseString] isEqualToString:[NSString stringWithFormat:@"Got data in %@: %@",charset,testString]]);

GHAssertTrue(success,@"Failed to correctly encode the data");

// Once more for luck

charset = @"windows-1252";

request = [ASIFormDataRequest requestWithURL:url];

[request setPostValue:testString forKey:@"value"];

[request setStringEncoding:NSWindowsCP1252StringEncoding];

[request startSynchronous];

success = ([[request responseString] isEqualToString:[NSString stringWithFormat:@"Got data in %@: %@",charset,testString]]);

GHAssertTrue(success,@"Failed to correctly encode the data");

request = [ASIFormDataRequest requestWithURL:url];

[request setPostValue:testString forKey:@"value"];

[request setPostFormat:ASIMultipartFormDataPostFormat];

[request setStringEncoding:NSWindowsCP1252StringEncoding];

[request startSynchronous];

success = ([[request responseString] isEqualToString:[NSString stringWithFormat:@"Got data in %@: %@",charset,testString]]);

GHAssertTrue(success,@"Failed to correctly encode the data");

// Ensure charset isn't added to file post (GH issue 36)

request = [ASIFormDataRequest requestWithURL:[NSURL URLWithString:@"http://allseeing-i.com/ASIHTTPRequest/Tests/return-raw-request"]];

[request setData:[@"test 123" dataUsingEncoding:NSUTF8StringEncoding] forKey:@"file"];

[request setRequestMethod:@"PUT"];

[request startSynchronous];

success = ([[request responseString] rangeOfString:@"charset=utf-8"].location == NSNotFound);

GHAssertTrue(success,@"Sent a charset header for an uploaded file");

}

- (void)testPUT

{

ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:[NSURLURLWithString:@"http://allseeing-i.com/ASIHTTPRequest/Tests/put_form_data"]];

[request setRequestMethod:@"PUT"];

[request setPostValue:@"cheep cheep" forKey:@"hello"];

[request startSynchronous];

NSString *expectedResponse = [[[NSString alloc] initWithBytes:[[request postBody] bytes] length:[[request postBody] length] encoding:[request stringEncoding]] autorelease];

BOOL success = ([[request responseString] isEqualToString:expectedResponse]);

GHAssertTrue(success,@"Failed to send form data using PUT");

// Ensure that other methods still default to POST

request = [ASIFormDataRequest requestWithURL:[NSURL URLWithString:@"http://allseeing-i.com/ASIHTTPRequest/Tests/put_form_data"]];

[request setRequestMethod:@"DELETE"];

[request setPostValue:@"cheep cheep" forKey:@"hello"];

[request startSynchronous];

success = ([[request responseString] isEqualToString:@"Got POST instead"]);

GHAssertTrue(success,@"Failed to send form data using PUT");

}

- (void)testCopy

{

NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:[NSURLURLWithString:@"http://allseeing-i.com"]];

ASIFormDataRequest *request2 = [request copy];

GHAssertNotNil(request2,@"Failed to create a copy");

[pool release];

BOOL success = ([request2 retainCount] == 1);

GHAssertTrue(success,@"Failed to create a retained copy");

success = ([request2 isKindOfClass:[ASIFormDataRequest class]]);

GHAssertTrue(success,@"Copy is of wrong class");

[request2 release];

}

- (void)testMultipleValuesForASingleKey

{

ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:[NSURLURLWithString:@"http://allseeing-i.com/ASIHTTPRequest/tests/multiple-values"]];

[request addPostValue:@"here" forKey:@"test_value[]"];

[request addPostValue:@"are" forKey:@"test_value[]"];

[request addPostValue:@"some" forKey:@"test_value[]"];

[request addPostValue:@"values" forKey:@"test_value[]"];

NSString *path1 = [[self filePathForTemporaryTestFiles] stringByAppendingPathComponent:@"file1.txt"];

NSString *path2 = [[self filePathForTemporaryTestFiles] stringByAppendingPathComponent:@"file2.txt"];

[@"hello" writeToFile:path1 atomically:NO encoding:NSUTF8StringEncoding error:nil];

[@"there" writeToFile:path2 atomically:NO encoding:NSUTF8StringEncoding error:nil];

[request addFile:path1 forKey:@"test_file[]"];

[request addFile:path2 forKey:@"test_file[]"];

[request startSynchronous];

NSString *expectedOutput = @"here\r\nare\r\nsome\r\nvalues\r\nfile1.txt\r\nfile2.txt\r\n";

BOOL success = [[request responseString] isEqualToString:expectedOutput];

GHAssertTrue(success,@"Failed to send the correct data");

// Check data replaces older data

request = [ASIFormDataRequest requestWithURL:[NSURL URLWithString:@"http://allseeing-i.com/ASIHTTPRequest/tests/single-values"]];

[request addPostValue:@"here" forKey:@"test_value[]"];

[request addPostValue:@"are" forKey:@"test_value[]"];

[request addPostValue:@"some" forKey:@"test_value[]"];

[request addPostValue:@"values" forKey:@"test_value[]"];

[request setPostValue:@"this is new data" forKey:@"test_value[]"];

[request addFile:path1 forKey:@"test_file[]"];

[request addFile:path2 forKey:@"test_file[]"];

[request setData:[@"this is new data" dataUsingEncoding:NSUTF8StringEncoding] forKey:@"test_file[]"];

[request startSynchronous];

expectedOutput = @"this is new data\r\nfile\r\n";

success = [[request responseString] isEqualToString:expectedOutput];

GHAssertTrue(success,@"Failed to send the correct data");

}

@end

ASIHTTPRequest中的DELETE、PUT、GET、POST请求实例-备用的更多相关文章

  1. 高版本(8以上)tomcat不支持rest中的delete和put方式请求怎么办

    出现问题 当我们去访问delete方式和put方式: 后来才知道tomcat8以上是不支持delete方式和put方式 解决方法: 在跳转目标的jsp头文件上改为(加上了isErrorPage=&qu ...

  2. Springboot的 get查看,post创建,put更新,delete删除 -四种请求实例(form + controller)

    总结 --get查看数据, post创建新数据行, put更新数据, delete删除数据行-- add和select功能都共用这一个页面, 需要进行区分显示 ,使用thymeleaf的三元选择,判断 ...

  3. ASIHTTPRequest中数据压缩问题与gzip

    出现了类似问题,先mark,以后修改 最近使用asi发现,部分网络回调数据不能正常的json解析,将responseHeaders头打印出来,才发现公司服务器部分数据添加了gzip压缩传输. 最近简单 ...

  4. jquery ajax 请求中多出现一次OPTIONS请求及其解决办法

    http://www.tangshuang.net/2271.html 在上一篇<服务端php解决jquery ajax跨域请求restful api问题及实践>中,我简单介绍了如何通过服 ...

  5. 在类的成员函数中调用delete this

    最近面试的时候被问到一个问题是,在C++中,能否在类的成员函数中调用delete this,后来网上查了一下资料,关于这个问题说得比较好的有http://blog.sina.com.cn/s/blog ...

  6. ASIHTTPRequest系列(一):同步和异步请求

    ASIHTTPRequest系列(一):同步和异步请求 发表于8个月前(2013-11-27 19:21)   阅读(431) | 评论(0) 6人收藏此文章, 我要收藏 赞0 ASIHTTPRequ ...

  7. MySQL_(Java)使用JDBC向数据库中删除(delete)数据

    MySQL_(Java)使用JDBC向数据库发起查询请求 传送门 MySQL_(Java)使用JDBC向数据库中插入(insert)数据 传送门 MySQL_(Java)使用JDBC向数据库中删除(d ...

  8. 关于JavaScript中的delete操作

    关于JavaScript中的delete操作 看到一道题,是这样的: (function(x){ delete x; return x; })(1); 1 null undefined Error 我 ...

  9. jQuery中ajax的4种常用请求方式

    jQuery中ajax的4种常用请求方式: 1.$.ajax()返回其创建的 XMLHttpRequest 对象. $.ajax() 只有一个参数:参数 key/value 对象,包含各配置及回调函数 ...

随机推荐

  1. hibernate 映射<三>一对一外键键关联

    bean 关系: 正向工程: 反向工程: 逆向生成步骤: 生成的xml: ... from hbm_one2one_pk.person person0_ left outer join hbm_one ...

  2. RenderBody, RenderPage and RenderSection methods in MVC 3

    原文地址:http://www.codeproject.com/Articles/383145/RenderBody-RenderPage-and-RenderSection-methods-in R ...

  3. HDU_2045——RPG问题,递推

    Problem Description 人称“AC女之杀手”的超级偶像LELE最近忽然玩起了深沉,这可急坏了众多“Cole”(LELE的粉丝,即"可乐"),经过多方打探,某资深Co ...

  4. codeforces 277.5 div2 F:组合计数类dp

    题目大意: 求一个 n*n的 (0,1)矩阵,每行每列都只有两个1 的方案数 且该矩阵的前m行已知 分析: 这个题跟牡丹江区域赛的D题有些类似,都是有关矩阵的行列的覆盖问题 牡丹江D是求概率,这个题是 ...

  5. MD中bitmap源代码分析--设置流程

    1. 同步/异步刷磁盘 Bitmap文件写磁盘分同步和异步两种: 1) 同步置位:当盘阵有写请求时,对应的bitmap文件相应bit被置位,bitmap内存页被设置了DIRTY标志.而在下发写请求给磁 ...

  6. IMS 相关名词解释

    IMS: IMS(IP Multimedia Subsystem)是IP多媒体系统,是一种全新的多媒体业务形式,它能够满足现在的终端客户更新颖.更多样化多媒体业务的需求. RCS:Rich Commu ...

  7. 我所理解的设计模式(C++实现)——策略模式(Strategy Pattern)

    概述: 每个人都要“交个人所得税”,但是“在美国交个人所得税”和“在中国交个人所得税”就有不同的算税方法. 而策略模式就是对算法进行包装,是把使用算法的责任和算法本身分割开来,委派给不同的对象管理.策 ...

  8. mnist数据集转换bmp图片

    Mat格式mnist数据集下载地址:http://www.cs.nyu.edu/~roweis/data.html Matlab转换代码: load('mnist_all.mat'); type = ...

  9. [Angular 2] Filter items with a custom search Pipe in Angular 2

    This lessons implements the Search Pipe with a new SearchBox component so you can search through eac ...

  10. JavaScript异步编程 ( 一 )

    1. 异步编程 Javascript语言的执行环境是"单线程"(single thread).所谓"单线程",就是指一次只能完成一件任务.如果有多个任务,就必须 ...