如何在iOS中使用ASI Http将数据发布到Web服务?

时间:2011-09-01 15:22:32

标签: iphone objective-c ios nsurlconnection asihttprequest

我正在使用ASI页面here中提供的说明。我正在尝试将一些数据发送到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,我检查了这个命令。

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的数据。什么都没发生。怎么了?

感谢您的帮助!

6 个答案:

答案 0 :(得分:3)

除了最重要的组件启动请求之外,你几乎拥有一切

您需要为同步请求添加[request startSynchronous];或为异步请求添加[requester startAsynchronous];(并且您可能需要委托方法来处理您所拥有的任何响应)

ASIHTTPRequest How to Use Guide中,这一切都很好。与此最相关的部分是“创建同步请求”和“创建异步请求”。从该页面也可以考虑一下:

  

通常,您应该优先使用异步请求而不是同步请求。当您从主线程同步使用ASIHTTPRequest时,您的应用程序的用户界面将锁定并在请求期间变得不可用。

答案 1 :(得分:2)

你忘了打电话:

[request setDelegate: self];
[request startAsynchronous];

或者:

[request startSynchronous];

如果您不打电话,则永远不会发出请求:)

答案 2 :(得分:1)

我的代码中没有看到[request startSynchronous](或[request startAsynchronous])的电话......您是否在任何地方发起请求?

答案 3 :(得分:1)

看起来您没有致电[request startAsynchronous];

检查ASIHTTPRequest documentation以了解有关如何使用

的更多详细信息

答案 4 :(得分:1)

您实际上并未发送请求。

1)您需要调用[request startSynchronous]或[request startAsynchronous]

2)如果您使用异步(您可能应该这样做),则需要设置委托并实现 - (void)requestFinished:(ASIHTTPRequest *)请求方法。

答案 5 :(得分:0)

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

}