【问题标题】:NSURLRequest Bad Request (400) to IIS ServerNSURLRequest 到 IIS 服务器的错误请求 (400)
【发布时间】:2017-01-30 14:14:53
【问题描述】:

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

谢谢

【问题讨论】:

    标签: iphone iis nsurlrequest


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

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

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

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

      【讨论】:

        猜你喜欢
        • 2019-08-25
        • 2018-04-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-11
        • 2012-04-27
        • 2015-11-24
        • 2015-10-07
        相关资源
        最近更新 更多