如何在iOS中使用ASI Http将数据发布到Web服务?
我正在使用ASI页面here中提供的说明。我正尝试将一些数据发送到Web服务,但没有看到任何结果。如何在iOS中使用ASI Http将数据发布到Web服务?
这是我sendRequest
方法,该方法被调用在viewDidLoad
-(void)sendRequest {
NSURL *url = [NSURL URLWithString:@"http://153.60.6.75:8080/BarcodePayment/transactions"];
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
[request addRequestHeader:@"Accept" value:@"application/json"];
[request addRequestHeader:@"Content-Type" value:@"application/json"];
NSString *dataContent = @"{\"id\":7,\"amount\":7.0,\"paid\":true}";
NSLog(@"dataContent: %@", dataContent);
[request appendPostData:[dataContent dataUsingEncoding:NSUTF8StringEncoding]];
[request setRequestMethod:@"POST"];
}
我检查dataContent
串和输出
{"id":7,"amount":7.0,"paid":true}
如果我使用卷曲的终端,我检查这个命令的作品。
curl -X POST -H 'Accept:application/json' -H 'Content-Type: application/json' http://153.60.6.75:8080/BarcodePayment/transactions/ --data '{"id":7,"amount":7.0,"paid":true}'
我的理解是,在使用curl,我将它设置为JSON,指定地址,指定这相当于在我的代码dataContent
数据。什么都没发生。怎么了?
感谢您的帮助!
你有漂亮的除了最重要的组件是开始请求之外,其他的一切都很多
您需要添加0用于同步请求的或用于异步请求的[requester startAsynchronous];
(并且您可能需要委托方法来处理您回来的任何响应)
这在ASIHTTPRequest How to Use Guide中都很好地覆盖了。与此最相关的部分是'创建同步请求'和'创建异步请求'。还有一些需要考虑的内容来自该页面:
通常,您应该对同步请求使用异步请求。当您从主线程同步使用ASIHTTPRequest时,应用程序的用户界面将锁定并在请求期间变得不可用。
你忘了打电话:
[request setDelegate: self];
[request startAsynchronous];
或者:
[request startSynchronous];
如果不调用任何这些,请求将永远不会被制成:)
我在代码中看不到[request startSynchronous]
(或[request startAsynchronous]
)的调用...您是否甚至在任何地方发起请求?
你不是实际发送请求的更多细节。
1)你需要调用[请求startSynchronous]或[请求startAsynchronous]
2)如果你使用异步(这你应该做的),你需要设置代理和实施 - (void)requestFinished:(ASIHTTPRequest *)请求方法。
- (void)postThresholdDetails:(NSDictionary *)info
{ 的NSString * urlString = [NSString的stringWithFormat:@ “%@%@ /”,BASEURL,PostThresholdDetails]; NSURL * url = [NSURL URLWithString:urlString];
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
[request setRequestMethod:@"POST"];
[request setDelegate:self];
[request setTimeOutSeconds:120];
[request addRequestHeader:@"Accept" value:@"application/json"];
[request addRequestHeader:@"content-type" value:@"application/x-www-form-urlencoded"];
request.allowCompressedResponse = NO;
request.useCookiePersistence = NO;
request.shouldCompressRequestBody = NO;
[request setPostBody:[NSMutableData dataWithData: [info objectForKey:@"jsondata"] ]];
[request startAsynchronous];
}