【问题标题】:How do I use ASI Http in iOS to POST data to a web service?如何在 iOS 中使用 ASI Http 将数据发布到 Web 服务?
【发布时间】:2011-09-01 15:22:32
【问题描述】:

我正在使用 ASI 页面 here 中提供的说明。我正在尝试将一些数据发送到 Web 服务,但没有看到任何结果。

这是我在 viewDidLoad 中调用的 sendRequest 方法

-(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。没发生什么事。怎么了?

感谢您的帮助!

【问题讨论】:

    标签: iphone objective-c ios nsurlconnection asihttprequest


    【解决方案1】:

    除了启动请求的最关键组件之外,您几乎拥有一切

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

    ASIHTTPRequest How to Use Guide 很好地涵盖了这一切。与此最相关的部分是“创建同步请求”和“创建异步请求”。还需要考虑从该页面获取的内容:

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

    【讨论】:

      【解决方案2】:

      你忘记打电话了:

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

      或者:

      [request startSynchronous];
      

      如果您不调用其中任何一个,则永远不会发出请求:)

      【讨论】:

        【解决方案3】:

        我没有在您的代码中看到对[request startSynchronous](或[request startAsynchronous])的调用...您甚至在任何地方发起请求吗?

        【讨论】:

          【解决方案4】:

          你好像没有打电话给[request startAsynchronous];

          查看ASIHTTPRequest documentation了解更多使用方法

          【讨论】:

            【解决方案5】:

            您实际上并没有发送请求。

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

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

            【讨论】:

              【解决方案6】:
              - (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];
              

              }

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2018-04-27
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2013-08-07
                • 1970-01-01
                • 2016-10-11
                相关资源
                最近更新 更多