如何使用asihttprequest发布json数据

Tan*_*Tan 2 json asihttprequest ios

我打算发布json数据:

NSString *newJSON = [theDictionary JSONRepresentation];

NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:ADDRESS,action]];
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
[request appendPostData:[newJSON dataUsingEncoding:NSUTF8StringEncoding]];

[request startSynchronous];
NSString *responseString = [request responseString];

NSMutableDictionary* responseDict = [responseString JSONValue];
NSLog(@"responseString = %@",responseString);
Run Code Online (Sandbox Code Playgroud)

代码是否有效?我错过了一些代码吗?我读了asihttprequest教程,发现它总是用asiformdatarequest发布数据,asihttprequest和asiformdatarequest之间的区别是什么,如果我只想发布json数据,我该怎么办?提前谢谢你.

更新:是的,它工作,但不能很好地工作,我使用一些工具测试数据,并收到一些额外的数据:

POST / HTTP/1.1
Host: 192.168.0.113
User-Agent: Ushi.com/1.0 CFNetwork/548.1.4 Darwin/11.3.0
Content-Length: 58
Run Code Online (Sandbox Code Playgroud)

Uma*_*mir 7

您可以像这样以json格式发布文本数据

ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];

[request setRequestMethod:@"POST"];
[request addRequestHeader:@"Accept" value:@"application/json"];
[request addRequestHeader:@"content-type" value:@"application/x-www-form-urlencoded"];
[request addRequestHeader:@"User-Agent" value:@"iPad"];
Run Code Online (Sandbox Code Playgroud)

API本身设置了用户代理,尽管您也可以自己设置它

request.allowCompressedResponse = NO;
request.useCookiePersistence = NO;
request.shouldCompressRequestBody = NO;
[request setPostBody:[NSMutableData dataWithData:[jsonRequest  dataUsingEncoding:NSUTF8StringEncoding]]];
[request startSynchronous];
Run Code Online (Sandbox Code Playgroud)