2010-12-04 6 views
6

В принципе, я посылаю запрос POST с пустым телом данных:Пустой корпус в POST в ASIHTTPRequest

ASIHTTPRequest *request [ASIHTTPRequest alloc] init]; 
    [request setURL:[NSURL URLWithString:escapedUrlString]]; 
    [request setRequestMethod:@"POST"]; 
    [request addRequestHeader:@"Content-Type" value:@"application/xml"]; 
    [request startSynchronous]; 

Но я получаю этот ответ каждый раз:

Неправильное значение 0x0000 NSStringEncoding обнаружено. Предположим, что NSStringEncodingASCII. Остановит это сопоставление совместимости в ближайшем будущем.

Мне интересно, нужно ли устанавливать значения сообщений.

ответ

9

У меня нет большого опыта работы с оберткой ASIHTTPRequest, но я вижу, что вы инициализацией его с alloc:init в то время как большинство примеров, которые я видел есть удобство Инициализатора requestWithURL:(NSURL*)url т.е.

ASIHTTPRequest *request = [AIHTTPRequest requestWithURL:escapedUrlString]; 

В догадке я» d сказать, что это удобство initaliser также установит некоторые из требуемых переменных для вашего почтового запроса, включая NSStringEnconding.

Из документации ASIHTTPRequest на http://allseeing-i.com/ASIHTTPRequest/How-to-use#handling_text_encodings

Обработка кодировок

ASIHTTPRequest будет пытаться читать кодировку текста полученных данных из заголовка Content-Type. Если он находит текстовое кодирование, он установит responseEncoding в соответствующий NSStringEncoding. Если он не находит текстовое кодирование в заголовке, оно будет использовать значение defaultResponseEncoding (по умолчанию - NSISOLatin1StringEncoding).

При вызове [запрос responseString], ASIHTTPRequest будет попытки создать строку из данных он получил, используя responseEncoding в качестве источника кодирования.

+0

Просто для подтверждения после быстрого анализа кода это на самом деле. Проверьте файл интерфейса (ASIHTTPRequest.h) для получения подробной информации о методах init/dealloc. – Rog 2010-12-05 00:10:34

3

Как говорит Рог, используйте initWithURL или requestWithURL. Во всяком случае, в моем случае проблема заключалась в том, что я подключался к медленному серверу и время ожидания запроса давало ошибку «Неверное обнаружение NSStringEncoding 0x0000».

Я решил его:

request.timeOutSeconds = 50; 

Вы можете попробовать более 50 секунд, если ваш сервер еще медленнее.

Смежные вопросы