[IOS] WebView에서 HTTP 요청에 헤더를 추가하여 referrer 설정

iOS의 WebView에서 HTTP 요청에 헤더를 추가하여 referrer를 설정하려면, UIWebViewDelegate를 사용하여 요청을 수정해야 합니다. 하지만 iOS 8 이후부터는 UIWebViewWKWebView로 대체되었으며, 더 이상 UIWebViewDelegate를 사용할 수 없습니다. 따라서 아래의 예시에서는 WKWebViewWKNavigationDelegate를 사용하는 방법을 제공하겠습니다.

다음은 Swift 언어를 사용한 예시 코드입니다:

import UIKit
import WebKit

class ViewController: UIViewController, WKNavigationDelegate {
    var webView: WKWebView!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        // WKWebView 생성
        webView = WKWebView(frame: view.bounds)
        webView.navigationDelegate = self
        view.addSubview(webView)
        
        // URLRequest 생성
        if let url = URL(string: "YOUR_URL_HERE") {
            var request = URLRequest(url: url)
            
            // Referrer 헤더 추가
            request.setValue("xxxxxx.com", forHTTPHeaderField: "Referer")
            
            // WKWebView로 요청 로드
            webView.load(request)
        }
    }
    
    // WKNavigationDelegate 메서드 - 페이지 로드 시작 시 호출됨
    func webView(_ webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation!) {
        // 페이지 로드 시작
    }
    
    // WKNavigationDelegate 메서드 - 페이지 로드 완료 시 호출됨
    func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
        // 페이지 로드 완료
    }
    
    // WKNavigationDelegate 메서드 - 페이지 로드 실패 시 호출됨
    func webView(_ webView: WKWebView, didFailProvisionalNavigation navigation: WKNavigation!, withError error: Error) {
        // 페이지 로드 실패
    }
    
    // 이외의 다른 WKNavigationDelegate 메서드도 필요한 경우 추가할 수 있습니다.
}

위의 예시 코드에서 “YOUR_URL_HERE”를 웹 페이지의 실제 URL로 바꾸고, Referer 헤더를 추가하려는 웹사이트의 도메인으로 설정하십시오. 이 코드는 WKWebView를 만들고, URLRequest를 사용하여 요청을 로드하기 전에 헤더를 설정합니다.

또한, WKNavigationDelegate를 구현하여 페이지 로드 상태를 추적할 수 있습니다. 위의 예시에서는 didStartProvisionalNavigation, didFinish, didFailProvisionalNavigation 메서드를 구현하여 페이지 로드 시작, 완료, 실패 시에 각각 호출되도록 했습니다. 필요에 따라 해당 메서드를 수정하거나 다른 메서드를 추가하여 원하는 작업을 수행할 수 있습니다.

참고: WKWebView는 iOS 8 이상에서 사용 가능합니다. 이전 버전의 iOS를 지원해야 하는 경우 UIWebView를 대신 사용해야 합니다.