1

我正在构建一个从 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 困住了。

谢谢

4

2 回答 2

1

想通了...我的网址末尾有一个 \n 。难怪 NSURLRequest 将 HTTP/1.1 放在另一行。我很惊讶 NSURL 没有清理字符串。哇。

于 2010-09-02T13:28:04.133 回答
0

我有一个类似的设置(虽然不是 IIS):GET 请求,在 iOS/Swift 代码()上使用 HTTP 400失败NSURLSession,但适用于 Postman 和 curl。

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

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

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

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

于 2017-01-30T06:14:53.460 回答