我有一个场景,当 HTTP 状态码不等于 200 ieHTTP_OK
时,我必须相应地进行一些修改。但我不想在内部进行这些更改 - (void) connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)
response 是的委托方法NSURLConnectionDelegate
。
有没有其他方法可以在不检查响应状态代码的情况下发现 URL 无法成功打开?
您必须像现在一样检查响应代码,但您可以发出 HTTP HEAD 请求以仅返回不包含内容的标头,而不是执行 HTTP GET 或 POST 请求。我曾经这样做是为了检查从 Android 应用程序中的网络检索到的损坏链接。
URL
使用 HTTP 方案 ( )标识的资源http:
只能通过 HTTP 服务访问。该 HTTP 服务有权根据 HTTP 方法或 HTTP 标头(例如Authorization
)来决定资源是否存在。
换句话说,不能通过 HTTP 以外的任何其他方式访问 HTTP 资源。
IMO 如果不检查响应,就无法找到您正在搜索的信息。
如果您尝试将检查保留在实际运行的主线程中,则可以使用sendsynchronousrequest在实际代码块中获取响应。
但请记住,这将阻塞您的主线程,直到返回响应。
我不认为有其他方法。如果您不想加载所有响应,您可以在收到带有[connection cancel]
.
您也可以看看,didFailWithError
但它不适用于 404 和 500 错误...
我有同样的感觉。didFinishLoading
我在or中处理响应代码didFailWithError
。
我只是创建一个名为lastHTTPResponse
type的属性NSHTTPURLResponse
并将其设置为didReceiveResponse
,然后再处理它。为每个响应设置它,以便您获得最后一个代码,而不是任何重定向(301 或 302)。
如果您有多个连接,则每个连接都需要一个属性。
有时,您想及早处理响应,但是当您调用自己的服务器时,大多数情况下没有必要。