ChromeExtension으로 header 정보를 조작해서 user-agent를 spoofing 해보려는데 조각 정보들만 있고,

완전한 예제 코드 같은게 없어서 삽질 좀 한 다음,

미래의 나를 위해 이 기록을 남김.




우선 manifest.json 에 permission 설정을 아래처럼 추가해야 함.

...

"permissions": [

    "<all_urls>",               // 이건 모든 request마다 다 넣을라고

    "webRequest",            // webRequest를 사용하기 위해

    "webRequestBlocking" // blocking 모드를 사용하기 위해

]

...

...



본격 가로채기.

background.js 에서 request 시 header를 보내기 전에 아래처럼 header를 조작함.


// request filter

var requestFilter = {

    // URL 필터. header를 조작하고자 하는 URL 패턴을 넣음. <all_urls>는 모든 request에 다 조작

    'urls': ['<all_urls>'],

    // 타입에 따른 필터. 종류는 많음.

    // "main_frame", "sub_frame", "stylesheet", "script", "image", "object", "xmlhttprequest", or "other" 

    'types': ['main_frame'] // 메인프레임에만

};


// opt_extraInfoSpec

var optExtraInfoSpec = [

    // 이게 있어야 callback이 blocking 모드로 동작한다. 

    // 그리고 이걸 할려면 manifest permissions에 webRequestBlocking 이 있어야 한다.

    'blocking',

    'requestHeaders'

];


chrome.webRequest.onBeforeSendHeaders.addListener(function(details){

    var headers = details.requestHeaders;

    headers.forEach(function(header, i){

        // user-agent 조작

        if (header.name.toLowerCase() === 'user-agent') {

            header.value = '백충덕 브라우저';

        }

    });


    return {requestHeaders: headers};

}, requestFilter, optExtraInfoSpec);





[참조]

1. 거의 완벽한 예제

2. ChromeExtension Documents






Posted by bloodguy
,