如何在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])的调用...您是否甚至在任何地方发起请求?

看起来你没叫[request startAsynchronous];

检查ASIHTTPRequest documentation关于如何使用

你不是实际发送请求的更多细节。

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]; 

}