0

我正在制作一个需要与Sendy API通信的 iPhone 应用程序。我相信它使用某种 JSON,但我不太确定,也不知道从哪里开始。我对subscribeAPI 的部分特别感兴趣。基本上,我需要知道如何从我的应用程序中与 Sendy API 对话。

任何帮助表示赞赏。

我的代码:

- (IBAction)submitButtonPressed:(id)sender
{
    self.data = [[NSMutableData alloc] initWithLength:0];
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:@"http://www.erwaysoftware.com/sendy/subscribe"]];
    [request setHTTPMethod:@"POST"];
    [request setValue:@"john@test.com" forHTTPHeaderField:@"email"];
    [request setValue:@"john" forHTTPHeaderField:@"name"];
    [request setValue:@"LxxxxxxxxxxxxxxxxxxxxQ" forHTTPHeaderField:@"list"];
    [request setValue:@"true" forHTTPHeaderField:@"boolean"];

    NSURLConnection *conn = [NSURLConnection connectionWithRequest:request delegate:self];
    [conn start];

}
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
    [self.data setLength:0];
}

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)d {
    [self.data appendData:d];
}

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
    [[[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Error", @"")
                                 message:[error localizedDescription]
                                delegate:nil
                       cancelButtonTitle:NSLocalizedString(@"OK", @"")
                       otherButtonTitles:nil] show];
}

- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
    NSString *responseText = [[NSString alloc] initWithData:self.data encoding:NSUTF8StringEncoding];

    // Do anything you want with it

    NSLog(@"%@", responseText);
}

当日志发生时,字符串为空。我通过断点知道调用了最后一个方法。

4

2 回答 2

2

查看 API,它只是纯文本响应。

由于它是 POST,因此您可以使用 anNSURLConnection来编写请求。有关格式化响应的信息,请参阅此问题

另一种方法是使用AFNetworkingRestKit 之类的东西,如果您使用 API 做更多工作,它们可能会更友好一些。

于 2013-04-04T21:01:56.490 回答
1

我猜你已经解决了这个问题,但万一其他人被困在这里(就像我一样),我想我会发布我所做的以使其正常工作。

您需要做的第一件事是创建一个名为 NSString+URLEncoding(或其他)的类别,它将从 blah@blah.com 获取您的电子邮件和姓名字段并将其转换为 blah%40blah.com。我从这里找到的方便的博客文章中修改了这个

@interface NSString (URLEncoding)
-(NSString *)urlEncodeUsingEncoding:(NSStringEncoding)encoding;
@end

#import "NSString+URLEncoding.h"

@implementation NSString (URLEncoding)
-(NSString *)urlEncodeUsingEncoding:(NSStringEncoding)encoding {
return (NSString *)CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(NULL,
                                                           (CFStringRef)self,
                                                           NULL,
                                                           (CFStringRef)@"!*'\"();:@&=+$,/?%#[]% ",
                                                                             CFStringConvertNSStringEncodingToEncoding(encoding)));}
@end

好的,现在只需导入 NSString+URLEncoding.h 并添加以下代码,您就可以开展业务了。这篇文章帮助我完成了这部分

- (IBAction)submitButtonPressed:(id)sender
{
NSMutableURLRequest *newRequest = [[NSMutableURLRequest alloc]initWithURL:[NSURL URLWithString:@"http://stashdapp.com/sendy/subscribe"]];
[newRequest setHTTPMethod:@"POST"];
[newRequest setValue:@"application/x-www-form-urlencoded; charset=utf-8" forHTTPHeaderField:@"Content-Type"];

NSString *email = @"name@domain.com";
NSString *name = @"First Lastname";
NSString *list = @"XXXXXXXXXXXXXXXXXX";

NSString *postData = [NSString stringWithFormat:@"email=%@&boolean=true&name=%@&list=%@", [email urlEncodeUsingEncoding:NSUTF8StringEncoding],[name urlEncodeUsingEncoding:NSUTF8StringEncoding],list];

[newRequest setHTTPBody:[postData dataUsingEncoding:NSUTF8StringEncoding]];

NSURLConnection *conn = [NSURLConnection connectionWithRequest:newRequest delegate:self];
[conn start];
}

您仍然包括您在问题中引用的委托方法。

希望它可以帮助某人!

于 2014-03-02T05:29:51.993 回答