【问题标题】:ASIHTTPRequest, request sent twiceASIHTTPRequest,请求发送两次
【发布时间】:2011-11-29 21:00:14
【问题描述】:

我刚刚开始为 iO 使用 ASIHTTPRequest,但我遇到了一个小问题。即使我只从库中得到一个对我的委托方法的回复,所有请求也会发送到服务器两次。

同步和异步请求都有这个问题。我将 Xcode 4 与 ARC 一起使用,但已通过添加 -fno-objc-arc 作为编译器标志为 ASIHTTPRequest 禁用它。

知道怎么了..?

代码:

ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
[request startSynchronous];

NSError *error = [request error];
if (!error) {
}

【问题讨论】:

    标签: iphone ios http xcode4 asihttprequest


    【解决方案1】:

    这也咬了我。我正在使用 GET 请求来验证服务器上的多用途凭证代码。当我们为兑换代码添加速率限制时,一些客户报告说他们应该达到了限制。事实证明,其中一些验证触发了两次兑换。

    您的请求正在使用 GET 方法。

    使用 GET 时的默认行为是允许持久连接 (the Keep-Alive HTTP header)。

    使用持久连接时,如果网络上的某些内容看起来很不稳定(这是一个技术术语),您的 GET 请求可能会被重新传输,而不是请求失败。这通常是可取的,因为 GET 请求通常对服务器没有任何副作用。

    另一方面,POST 或 PUT 请求默认不使用持久连接,并且不会重新传输您的操作,这很可能是信用卡购买或其他具有显着副作用的操作。

    如果您希望阻止您的 ASIHTTPRequest GET 有时发送 2 个或更多服务器请求(由于您无法控制的网络问题),您可以简单地设置此标志:

    request.shouldAttemptPersistentConnection = NO;
    

    这应该处理服务器上的虚假 GET 重复。

    【讨论】:

    • +1。一年零几个月后,救命稻草。这实际上应该被标记为正确答案,因为它解决了 OP 在他第一次提出问题时遇到的问题。
    • 我也通过 POST 看到了这一点。我通读了代码,没有看到 POST 请求的任何排除。
    【解决方案2】:

    感谢您的回复。我搬到了新的 MKNetworkKit 并且从未回头看 ASIHttpRequest。 https://github.com/MugunthKumar/MKNetworkKit

    Øystein

    【讨论】:

    • 恢复一个古老的帖子:我刚刚使用 MKNetworkKit 继承了一些代码,并且在身份验证失败时收到了多个请求。知道如何使用 MKNetworkKit 来防止这种行为吗?
    【解决方案3】:

    它可能会发送 HEAD 请求以获取响应大小,然后发送 GET 请求以实际获取内容。请参阅this section of the documentation 了解更多信息。

    【讨论】:

    • 感谢您的评论,我能够确定 ASIHTTPRequest 出现问题的原因。谢谢。
    【解决方案4】:

    这可能是因为持久连接正在使用中,所以您看到旧连接上的请求失败,然后新连接上的请求正常。 (GregInYEG 也是正确的,它可能是一个 HEAD 请求。)

    如果您使用诸如 wireshark 或 charlesproxy 之类的工具收集网络跟踪信息,那么就可以准确地看到正在发生的事情。

    【讨论】:

      猜你喜欢
      • 2019-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-09
      相关资源
      最近更新 更多