NSURLRequest Неверный запрос (400) к серверу IIS - PullRequest
1 голос
/ 02 сентября 2010

Я создаю приложение для iPhone, которое извлекает файл с сервера IIS7.Я использую старый добрый NSURLRequest для получения этого файла.Запрос работает нормально, если я использую другой веб-сервер, но по какой-то причине он продолжает выдавать мне 400 неверных запросов.Поэтому я посмотрел на запрос, который отправляет NSURLRequest, и он выглядит так:

::1 [Wed Sep 01 20:18:53 -0400 2010]: GET /some.file
::1 [Wed Sep 01 20:18:53 -0400 2010]:  HTTP/1.1
::1 [Wed Sep 01 20:18:53 -0400 2010]: Host: localhost
::1 [Wed Sep 01 20:18:53 -0400 2010]: User-Agent: MyApp/1.0 CFNetwork/485.2 Darwin/10.4.0
::1 [Wed Sep 01 20:18:53 -0400 2010]: Accept: */*
::1 [Wed Sep 01 20:18:53 -0400 2010]: Accept-Language: en-us
::1 [Wed Sep 01 20:18:53 -0400 2010]: Accept-Encoding: gzip, deflate
::1 [Wed Sep 01 20:18:53 -0400 2010]: Connection: keep-alive
::1 [Wed Sep 01 20:18:53 -0400 2010]: 

Я использовал telnet и подключился напрямую к веб-серверу.Отправил следующее:

GET /some.file HTTP/1.1\r\n

Это сработало нормально, сервер ответил файлом.

У меня такое ощущение, что тот факт, что NSURLRequest помещает HTTP / 1.1 в другую строку, вызывает возврат IIS7Плохой запрос.

Кто-нибудь знает, как я могу исправить эту ситуацию?Я не против внесения изменений на сервере или клиенте, но, к сожалению, я застрял в IIS.

Спасибо

Ответы [ 2 ]

1 голос
/ 02 сентября 2010

Разобрался ... у моего URL в конце был \ n.Неудивительно, что NSURLRequest поместил HTTP / 1.1 в другую строку.Я удивлен, NSURL не очищает строку.ничего себе.

0 голосов
/ 30 января 2017

У меня была похожая настройка (но не IIS): запрос GET, не удается с HTTP 400 на iOS / код Swift (NSURLSession), но работает на Почтальоне и свернуться.

После нескольких часов попыток выяснить, что может отличаться между запросами, отправленными каждым клиентом, я обнаружил, мой код iOS отправлял пустой закодированный быстрый словарь (типа [String : Any]) как JSON в теле запроса.

Я разработал свой клиентский код так, чтобы он брал в качестве параметров запроса необязательный словарь и кодировал его / добавлял в тело запроса независимо от его содержимого. Некоторые запросы (например, тот, который я пытался) не требуют каких-либо параметров в теле, и каким-то образом пустой dict вызывал проблемы. Сняв его исправил соединение.

(Теперь я проведу рефакторинг своей функции, взяв вместо нее необязательный словарь в качестве аргумента, и передам nil для запросов, не имеющих параметров в теле.)

Возможно, это не решение вопроса ОП, но связанное. Вот на всякий случай это поможет кому-то избежать потерянных часов страданий ...

...