NSURLRequest проблема - PullRequest
       4

NSURLRequest проблема

2 голосов
/ 21 марта 2011

Hee

У меня проблема с моим NSURLRequest HTTP POST, и я не могу выяснить, что происходит не так.

Это мой сервер php:

<html>
<head>
</head>
<body>
    <?php 
        if (! isset($_POST['sometext'])) {
            echo "NOT SET";
        } else {
            echo $_POST['sometext'];
        }
    ?>
</body></html>

Это мой код цели c для публикации данных:

NSString *urlString = @"http://localhost:8888/postpage";
NSURL *url = [[NSURL alloc] initWithString:urlString];
NSMutableURLRequest *urlRequest=[NSMutableURLRequest requestWithURL:url];

[url release];


    [urlRequest setHTTPMethod:@"POST"];
    [urlRequest addValue: msgLength forHTTPHeaderField:@"Content-Length"];
    [urlRequest setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"content-type"];
    NSString *postString = @"sometext=Hello&language=en";
    NSString *msgLength = [NSString stringWithFormat:@"%d", [postString length]];
    [urlRequest setHTTPBody:[postString dataUsingEncoding:NSUTF8StringEncoding]];


NSString *returnString = [[NSString alloc] initWithData:[NSURLConnection sendSynchronousRequest:urlRequest returningResponse:nil error:nil] encoding:NSUTF8StringEncoding];
NSLog(@"%@",returnString);

Результат NSLog:

<html>
    <head>
    </head>
    <body>
        NOT SET 
    </body>
</html>

Спасибо уже

Ответы [ 3 ]

4 голосов
/ 21 марта 2011

Я несколько раз сталкивался с той же проблемой, и решением было добавить это к запросу:

[urlRequest setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"content-type"];
2 голосов
/ 21 марта 2011

Возможным источником проблемы может быть тот факт, что в коде вы устанавливаете заголовок Content-Length перед присвоением значения переменной msgLength .Поскольку методы obj-C для объекта nil возвращают nil (а nil равен 0), вы устанавливаете Content-Lenght равным 0. Попробуйте переместить строку

NSString *msgLength = [NSString stringWithFormat:@"%d", [postString length]];

до

[urlRequest addValue: msgLength forHTTPHeaderField:@"Content-Length"];
0 голосов
/ 21 марта 2011

Я предлагаю вам попробовать Библиотека ASIHTTPRequest , чтобы она не только могла легко обрабатывать http-запрос, как ваша проблема, просто используйте ASIFormDataRequest , но и легко асинхронно обрабатывать.

...