我正在构建一个从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。
由于
答案 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问题的解决方案,而是相关的。在这里,万一它可以帮助别人避免失去数小时的痛苦......