NSURLRequest错误请求(400)到IIS服务器

时间:2010-09-02 00:25:08

标签: iphone iis nsurlrequest

我正在构建一个从IIS7服务器检索文件的iPhone应用程序。我正在使用普通的旧NSURLRequest来检索此文件。如果我使用其他Web服务器,请求工作正常,但由于某种原因,这个请求一直给我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 个答案:

答案 0 :(得分:1)

想出来......我的网址最后有一个\ n。难怪NSURLRequest将HTTP / 1.1放在另一条线上。我很惊讶NSURL不清理字符串。哇。

答案 1 :(得分:0)

我有类似的设置(不是IIS):在iOS / Swift代码(NSURLSession)上使用HTTP 400获取GET请求,失败,但工作关于邮递员和卷曲。

在尝试找出每个客户端发送的请求之间可能存在差异的几个小时后,我发现我的iOS代码发送了一个空的swift字典(类型为[String : Any] })在请求正文中编码为JSON。

我设计了我的客户端代码,将非可选字典作为请求参数,并将其编码/附加到请求主体,而不管其内容如何。一些请求(比如我正在尝试的那个)不需要正文中的任何参数,并且某些空dict导致了问题。删除它修复了连接。

(我现在将重构我的函数,将可选字典作为参数,并将nil传递给正文中不带参数的请求。)

也许不是OP问题的解决方案,而是相关的。在这里,万一它可以帮助别人避免失去数小时的痛苦......