1

ActiveCollab 3 ベータ版と連携する目的の C プログラムを実装しようとしていますが、いくつか問題があります。ブラウザで NSLog が出力する URL を入力すると、すべてのプロジェクトの xml をプルするのに問題なく動作します。このプログラムを介してアクセスしようとすると、うまく動作しません。HTTP 403 が返されます。エラー。私はObjective Cを初めて使用し、学習経験としてこれを行っているため、一部のコードが冗長になる場合があります。助けてくれてありがとう。インポートは山かっこで囲まれていますが、StackOverflow で非表示になるため、引用符で囲みました

#import "Foundation/Foundation.h"

int main (int argc, const char * argv[]) {

    NSString *token = @"my-token";
    NSString *path_info = @"プロジェクト";
    NSString *url = @"http://my-site/api.php?";

    NSString *post = [[NSString alloc] initWithFormat:@"path_info=%@&auth_api_token=%@",path_info, token];
    NSLog(@"投稿: %@", 投稿);

    NSString *newRequest;
    newRequest = [url stringByAppendingString:post];

    NSLog(@"パス: %@", newRequest);

    NSData *postData = [newRequest dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];

    NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease];
    NSString *postLength = [NSString stringWithFormat:@"%d", [postData の長さ]];

    [request setURL:[NSURL URLWithString:newRequest]];
    [request setHTTPMethod:@"POST"];
    [request setValue:postLength forHTTPHeaderField:@"Content-Length"];
    [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
        [request setHTTPBody:postData];

    NSURLResponse *応答;
    NSError *エラー;
    NSData *responseData = [NSURLConnection sendSynchronousRequest:request returnedResponse:&response エラー:&err];

    NSString *returnData = [[[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding] autorelease];
    NSLog(@"%@", returnData);

    //printf("印刷行");
    0 を返します。
}
4

1 に答える 1

0

リクエスト ヘッダーが制限的で不要であり、AC API の場合は POST ではなく GET リクエストが必要です

int main (int argc, const char * argv[]) 
{

    NSString *requestString = [[NSString alloc] initWithFormat:@"path_info=%@&auth_api_token=%@", path_info, token];
    NSLog(@"Post: %@", requestString);

    NSString *newRequest;
    newRequest = [url stringByAppendingString: requestString];

    NSLog(@"Path: %@", newRequest);

    NSData *postData = [newRequest dataUsingEncoding: NSASCIIStringEncoding allowLossyConversion: YES];

    NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease];

    NSLog(@"Data: %@", postData);

    [request setURL: [NSURL URLWithString:newRequest]];
    [request setHTTPMethod: @"GET"];

    NSURLResponse *response;

    NSError *err;
    NSData *responseData = [NSURLConnection sendSynchronousRequest: request returningResponse: &response error: &err];
    NSString *returnData = [[[NSString alloc] initWithData: responseData encoding: NSUTF8StringEncoding] autorelease];
    NSLog(@"Return: %@", returnData);

    //printf("Print line");
    return 0;
}
于 2012-07-04T07:01:50.727 に答える