Tôi đã xem manyquestions yêu cầu (và trả lời) cách cung cấp bằng chứng xác thực khi bạn biết trước rằng yêu cầu yêu cầu chúng.Làm cách nào để phát hiện một thách thức xác thực từ UIWebView?
Khi tôi tải một trang web mà yêu cầu một thách thức xác thực, (trả lời bằng HTTP 401), tôi UIWebViewDelegate
chỉ nhận được callbacks sau: webView:shouldStartLoadWithRequest:navigationType:
và đôi khi webViewDidStartLoad:
(webViewDidStartLoad:
dường như được gọi là nếu tôi hướng trực tiếp đến trang web, và nó dường như không được gọi nếu tôi được chuyển hướng đến đó).
Bằng cách ghi đè -[NSObject respondsToSelector:]
, UIWebViewDelegate
nhận một số cuộc gọi đến uiWebView:resource:canAuthenticateAgainstProtectionSpace:forDataSource:
và uiWebView:resource:didReceiveAuthenticationChallenge:fromDataSource:
, điều này có thể hữu ích, nhưng tất nhiên đó là API riêng tư và có thể sẽ khiến ứng dụng của tôi bị từ chối.
Tôi đã thử nghiệm một vài ứng dụng chính thống khác với nhúng UIWebView
s. Cho đến nay, chỉ Chrome xử lý các thách thức xác thực này một cách chính xác. Tôi thậm chí đã thiết lập máy chủ của riêng mình và xác thực rằng Chrome chỉ POST
s một lần. Twitter và Tweetbot không chỉ hiển thị màn hình tải mãi mãi, giống như tôi.
Có cách nào khác (có thể rất khó hiểu) để phát hiện những thách thức xác thực khác ngoài việc sử dụng số liệu đầu cơ thứ hai NSURLConnection
? Nếu tôi thực hiện yêu cầu POST
, điều đó sẽ tăng gấp đôi POST
mọi thứ, điều đó thật tệ.
I've added a radar to request an enhancement to UIWebView for this. Hãy sao chép nó.
Cảm ơn bạn đã đưa ra yêu cầu về radar - Tôi đã lừa nó! –