【问题标题】:How to get a complete request from a NSURLRequest?如何从 NSURLRequest 获取完整的请求?
【发布时间】:2012-02-24 13:18:44
【问题描述】:

有什么方法可以获取 NSURLConnection 发送 NSURLRequest 时发送的实际数据?现在我主要对查看 HTTP 和 HTTPS 请求感兴趣,但是由于 NSURLRequest 适用于许多协议,似乎应该有一种通用的方法来查看任何类型的请求的相应数据。

是我遗漏了什么,还是我需要通过组合标头、正文等来自己构造请求?

为了清楚起见,我想以编程方式执行此操作,而不是通过查看服务器端显示的内容。

更新:此时我已经编写了代码,可以使用 NSURLRequest 中的数据有效地构造请求,所以我不是在问如何去做。但是,我仍然想知道是否有一种方法可以访问 URL 加载系统将生成的请求流。换句话说,如果 NSURLConnection 要发送我的 NSURLRequest,我可以访问将要发送的确切字节吗?

【问题讨论】:

    标签: objective-c ios nsurlconnection nsurlrequest foundation


    【解决方案1】:

    根据你的最后一个问题:

    1. 检查 cookiesCenter。
    2. 检查凭据存储。
    3. 例如在第一个 urlConnection 的委托方法 didReceiveResponse: 上记录所有标头。
    4. 与本地 Web 服务建立此连接并尝试捕获所有标头、参数等。

    另外,最简单的方法是自己提出请求。

    【讨论】:

    • 感谢您的回答。我很想知道你在想哪个问题——我以前没有在这里问过这样的问题,但也许你记得的问题会有所帮助。无论如何,我应该更具体一点:我想要做的是在代码中 获取请求。似乎 NSURLConnection 可能有类似-requestDataFromURLRequest: 的方法。 URL 加载系统知道如何构造原始请求数据。我想让它为我做这件事,然后把请求数据交还给我,而不是连接和发送它。
    • 在这种情况下尝试使用CFStream,然后发出请求。您将能够看到 writeStream 中的所有数据。
    【解决方案2】:

    我是否遗漏了什么,或者我需要自己构建请求 通过组合标题、正文等?

    事实证明,这正是我需要做的,而且很有意义。它是协议处理程序(NSURLProtocol 子类),而不是 NSURLRequest,它知道如何为特定协议格式化请求。幸运的是,将 NSURLRequest 的实例渲染为有效的 HTTP 请求非常容易。您可以从请求中获取方法(GET、POST 等)、请求的资源和主机,还可以使用返回字典的-allHTTPHeaderFields 方法获取所有 HTTP 标头。然后,您可以遍历字典中的键并将行添加到请求中,例如:

    for (NSString *h in headers) {
        [renderedRequest appendFormat:@"%@: %@\r\n", h, [headers objectForKey:h]];
    }
    

    【讨论】:

      猜你喜欢
      • 2013-02-01
      • 2014-11-15
      • 1970-01-01
      • 1970-01-01
      • 2015-06-26
      • 2013-06-08
      • 2015-10-28
      • 1970-01-01
      • 2021-03-29
      相关资源
      最近更新 更多