1

我有一个场景,当 HTTP 状态码不等于 200 ieHTTP_OK时,我必须相应地进行一些修改。但我不想在内部进行这些更改 - (void) connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response 是的委托方法NSURLConnectionDelegate

有没有其他方法可以在不检查响应状态代码的情况下发现 URL 无法成功打开?

4

5 回答 5

1

您必须像现在一样检查响应代码,但您可以发出 HTTP HEAD 请求以仅返回不包含内容的标头,而不是执行 HTTP GET 或 POST 请求。我曾经这样做是为了检查从 Android 应用程序中的网络检索到的损坏链接。

于 2013-05-07T13:45:21.360 回答
0

URL使用 HTTP 方案 ( )标识的资源http:只能通过 HTTP 服务访问。该 HTTP 服务有权根据 HTTP 方法或 HTTP 标头(例如Authorization)来决定资源是否存在。

换句话说,不能通过 HTTP 以外的任何其他方式访问 HTTP 资源。

于 2013-05-07T13:02:02.917 回答
0

IMO 如果不检查响应,就无法找到您正在搜索的信息。

如果您尝试将检查保留在实际运行的主线程中,则可以使用sendsynchronousrequest在实际代码块中获取响应。

但请记住,这将阻塞您的主线程,直到返回响应。

于 2013-05-07T12:57:17.880 回答
0

我不认为有其他方法。如果您不想加载所有响应,您可以在收到带有[connection cancel].

您也可以看看,didFailWithError但它不适用于 404 和 500 错误...

于 2013-05-07T12:59:04.663 回答
0

我有同样的感觉。didFinishLoading我在or中处理响应代码didFailWithError

我只是创建一个名为lastHTTPResponsetype的属性NSHTTPURLResponse
并将其设置为didReceiveResponse,然后再处理它。为每个响应设置它,以便您获得最后一个代码,而不是任何重定向(301 或 302)。

如果您有多个连接,则每个连接都需要一个属性。

有时,您想及早处理响应,但是当您调用自己的服务器时,大多数情况下没有必要。

于 2013-05-07T13:55:46.050 回答