1

C# で素晴らしくシンプルなことが、Objective C ではクマに変わる

        static private void AddUser(string Username, string Password)
    {
        HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(new Uri("http://192.168.1.10:8080/DebugUser?userName=" + Username + "&password=" + Password));

        request.Method = "POST";
        request.ContentLength = 0;

        HttpWebResponse response = (HttpWebResponse)request.GetResponse();

        Console.Write(response.StatusCode);
        Console.ReadLine();
    }

正常に動作しますが、Objective-C (IOS) に変換しようとすると、「接続状態 405 メソッドは許可されていません」というメッセージが表示されます

-(void)try10{
    NSLog(@"Web request started");
    NSString *user = @"me@inc.com";
    NSString *pwd = @"myEazyPassword";
    NSString *post = [NSString stringWithFormat:@"username=%@&password=%@",user,pwd];
    NSData *postData = [post dataUsingEncoding:NSUTF8StringEncoding];
    NSString *postLength = [NSString stringWithFormat:@"%ld", (unsigned long)[postData length]];
    NSLog(@"Post Data: %@", post);

    NSMutableURLRequest *request = [NSMutableURLRequest new];
    [request setURL:[NSURL URLWithString:@"http://192.168.1.10:8080"]];
    [request setHTTPMethod:@"POST"];
    [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
    [request setHTTPBody:postData];

    NSURLConnection *theConnection = [[NSURLConnection alloc] initWithRequest:request delegate:self];

    if(theConnection){
        webData = [NSMutableData data];
        NSLog(@"connection initiated");
    }
}

IOS で POST を使用するためのヘルプまたはポインターは、非常に役立ちます。

4

1 に答える 1

1

これらの要求はまったく同じではありません。C# の例/DebugUserでは、 query params を使用して POST リクエストを送信し?userName=<username>&password=<password>、obj-c/は form-urlencoded dataを使用して POST リクエストを送信しますuserName=<username>&password=<password>。その問題は URI パスのこの小さな間違いだと思います (ほとんどの場合、これらの小さな愚かな間違いは、実際の問題よりも解決に時間がかかります.. ;))。さらに、パラメーターを URL エンコードすることをお勧めします。この例では、有効な url/form-url エンコード データme@inc.comとしてユーザー名をエンコードする必要があります。me%40inc.comivar に関する私のコード コメントも参照してください。

そのようなものはうまくいくはずです(その場で書かれています、私はそれをコンパイルしていません/投稿する前に確認してください):

-(void)try10{
    NSString *user = @"me%40inc.com";
    NSString *pwd = @"myEazyPassword";
    NSString *myURLString = [NSString stringWithFormat:@"http://192.168.1.10:8080/DebugUser?username=%@&password=%@",user,pwd];
    NSMutableURLRequest *request = [NSMutableURLRequest new];
    [request setURL:[NSURL URLWithString:myURLString]];
    [request setHTTPMethod:@"POST"];

    NSURLConnection *theConnection = [[NSURLConnection alloc] initWithRequest:request delegate:self];

    if(theConnection){
        // I suppose this one is ivar, its safer to use @property
        // unless you want to implement some custom setters / getters
        //webData = [NSMutableData data];
        self.webData = [NSMutableData data];
        NSLog(@"connection initiated");
    }
}
于 2013-08-27T23:25:03.553 に答える