2010-09-02 1 views
1

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

::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]: 

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

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

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

У меня такое чувство, что тот факт, что NSURLRequest помещает HTTP/1.1 в другую строку, заставляет IIS7 возвращать Bad Request.

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

Благодаря

ответ

1

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

0

Я имел подобную установку (не IIS, однако): GET запрос, не удается с HTTP 400 КСН/Swift код (NSURLSession), но работает на Почтальон и завитков.

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

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

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

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