2

構築中の社内プロジェクトのために、会社の Basecamp 情報をリクエストしようとしています。ASP.NET 環境で資格情報を追加する方法は理解していますが、iPad 開発は初めてで、Basecamp から適切な応答を得られないようです。これが私がやっていることです:

NSMutableURLRequest *theRequest=[NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://mybasecampname.basecamphq.com/projects.xml"]
                                             cachePolicy:NSURLRequestUseProtocolCachePolicy
                                          timeoutInterval:60.0 ];

Bsaecamp が必要とする HTTP ヘッダーを次のように追加しています。

[theRequest setValue:@"application/xml" forHTTPHeaderField:@"Content-Type" ];
    [theRequest setValue:@"application/xml" forHTTPHeaderField:@"Accept" ];

認証目的で資格情報も送信する必要があることはわかっています-認証トークンと好きなパスワードですが、これを行う最善の方法がわかりません。これが私が試していることです:

NSURLCredential *credential = [NSURLCredential credentialWithUser:@"MY TOKEN HERE"
                                                             password:@"x"
                                                persistence:NSURLCredentialPersistenceForSession];

私の質問は次のとおりです。私はここで正しい軌道に乗っていますか、それとも何かが完全に欠けていますか?

これが必要なものを説明する Basecamp API の詳細へのリンクです: http://developer.37signals.com/basecamp/

助けていただければ幸いです。

ジョー

4

1 に答える 1

5

いつものように、私は最終的にそれを解決しました。didReceiveAuthenticationChallenge メソッドを使い始めると、うまくいき始めました。

そう。リクエスト方法を簡略化しました:

- (void)startRequest
{
    NSURL *url = [NSURL URLWithString:@"http://mybasecampproject.basecamphq.com/projects.xml"];
    NSMutableURLRequest *urlRequest = [NSMutableURLRequest requestWithURL:url];

    // Start the connection request
    urlConnection = [[NSURLConnection alloc] initWithRequest:urlRequest delegate:self];

    }

次に、認証チャレンジを受信する方法を設定します。

- (void)connection:(NSURLConnection *)connection 
didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge
{
    NSLog(@"Authentication challenge..."); 

    NSURLCredential *cred = [[[NSURLCredential alloc] initWithUser:@"my basecamp token here" password:@"X"
                                                           persistence:NSURLCredentialPersistenceForSession] autorelease];
        [[challenge sender] useCredential:cred forAuthenticationChallenge:challenge];

}

次に、返されたデータをキャッチするように didReceiveData メソッドを設定します。

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
    NSLog(@"Did receive data"); 

    NSString * strResult = [[NSString alloc] initWithData: data encoding:NSUTF8StringEncoding];
    NSLog(strResult);
}

これが他の誰かに役立つことを願っています。

このためのより良い方法を聞いてまだ幸せです

JJ

于 2010-10-16T03:37:06.493 に答える