chrome http Request Header 修改插件

chrome http Request Header 修改插件

2013-05-31 11:03:03|  分类: JavaScript |  标签:chrome  extensions  change  http  header  |举报|字号 订阅

下载LOFTER我的照片书  |

  最近因为需要搞 Chrome 的浏览器插件,所以了解了 Chrome Extensions 的一些基本知识。Chrome 插件都可以在以下目中找到。

C:\Users\YouName\AppData\Local\Google\Chrome\User Data\Default\Extensions

  里面的文件夹名称是随机字符串,需要找到对应的可以打开 Chrome 中的,“工具”-->>“扩展程序”,里面去看对应插件的目录位置。

  官方手册地址:https://developer.chrome.com/extensions/index.html

  先说一下程序的功能,程序的功能:当插件启用后,能够对指定范围的 urls request Header,进行修改。可以指定 Header 中,X-Forward-For,Referer,User-Agent,Cookie的值。也可以对Header中“X-Forward-For”的值(IP地址)随机生成。“Reffer”字段的值全部替换成请求的目标的URL值。用来做什么这里就不详细说了,自己发觉。

  下图是设置启用界面截图:

  这张是自动添加“X-Forward-For”,和修改“Reffer”,添加“Cookie”后的结果:可以看到请求的是 google Extensions 的网页,但是呢,Cookie 和 Referer 被我设置成为了我这里的博客地址。

  以下是程序的完成实现:

  1、先上一张目录结构说明图:

  2、然后是每个 Chrome 插件都有的 manifest.json 文件:

{
"name": "Change Request Header",
"description": "Change Http/Https Request Header!",
"version": "1.0",
"browser_action": {
"default_title": "Change Request Header",
"dafault_icon": "./icons/icon.png",
"default_popup": "./html/popup.html"
},
"icons": {
"16": "./icons/icon.png",
"32": "./icons/icon.png",
"48": "./icons/icon.png",
"128": "./icons/icon.png"
},
"background": {
"scripts": ["./js/background.js"]
},
"permissions": ["tabs", "webRequestBlocking", "webRequest", "<all_urls>"],
"manifest_version": 2
}

  3、popup.html 页面的设计:

<!DOCTYPE html>
<html>
<head>
<title>Change Request Header Setting</title>
<link href="../css/popup.css" rel="stylesheet" type="text/css">
<script src="../js/jquery.js"></script>
<script src="../js/popup.js"></script>
</head>
<body>
<div id="main">
<h3>Change Request Header Setting</h3>
<hr />
<div id="setting">
<span class="text">X-Forward-For:</span><input type="text" class="input" id="xForward" name="XForward" />&nbsp;&nbsp;&nbsp;&nbsp;<input type="checkbox" class="checkbox" id="randomip" /> Random IP<br />
<span class="text">Referer:</span><input type="text" class="input" id="referer" name="referer" />&nbsp;&nbsp;&nbsp;&nbsp;<input type="checkbox" class="checkbox" id="targeturl" /> Target URL<br />
<span class="text">User-Agent:</span><input type="text" class="input" id="userAgent" name="Uagent" /><br />
<span class="text">Cookie:</span><textarea class="input" cols="input" id="cookieArea" name="Cookie" placeholder="If the input is null, then it will use the origin value."></textarea>
<hr />
<input type="radio" id="exceptUrl" checked="checked"/> Except HOST: <input type="text" id="exceptUrltext" value=".google.com;.baidu.com;.qq.com" /><br />
<input type="radio" id="includeUrl" /> Include URL: <input type="text" id="includeUrltext" disabled="disabled" placeholder="Target site is ok" /><br />
<hr />
<div id="divButton">
<input type="button" class="button" id="enter" value="Enter" /><input type="button" class="button" id="reset" value="Reset" />
</div>
</div>
</div>
</body>
</html>

  4、popup.html 中的 css 文件可以按需修改,这里不贴了。然后重要的还有 popup.js 和 background.js 比较有用,这里发出来一下:

  popup.js:

$(document).ready(function() {
$(‘#xForward‘).val(localStorage[‘xForward‘]);
$(‘#referer‘).val(localStorage[‘referer‘]);
$(‘#userAgent‘).val(localStorage[‘userAgent‘]);
$(‘#cookieArea‘).val(localStorage[‘cookie‘]);

if(localStorage[‘isChange‘] == ‘true‘){
$(‘#enter‘).attr({‘disabled‘: true});
}

$(‘#randomip‘).change(function() {
//alert($(‘#randomip‘).is(‘:checked‘));
$(‘#xForward‘).attr({‘disabled‘:$(‘#randomip‘).is(‘:checked‘)});
$(‘#xForward‘).val(‘‘);
});
$(‘#targeturl‘).change(function() {
//alert($(‘#randomip‘).is(‘:checked‘));
$(‘#referer‘).attr({‘disabled‘:$(‘#targeturl‘).is(‘:checked‘)});
$(‘#referer‘).val(‘‘);
});
$(‘#exceptUrl‘).change(function() {
$(‘#includeUrl‘).attr({‘checked‘: !$(‘#exceptUrl‘).is(‘:checked‘)});
$(‘#includeUrltext‘).attr({‘disabled‘:$(‘#exceptUrl‘).is(‘:checked‘)});
$(‘#exceptUrltext‘).attr({‘disabled‘:!$(‘#exceptUrl‘).is(‘:checked‘)});
});
$(‘#includeUrl‘).change(function() {
$(‘#exceptUrl‘).attr({‘checked‘: !$(‘#includeUrl‘).is(‘:checked‘)});
$(‘#exceptUrltext‘).attr({‘disabled‘:$(‘#includeUrl‘).is(‘:checked‘)});
$(‘#includeUrltext‘).attr({‘disabled‘:!$(‘#includeUrl‘).is(‘:checked‘)});
});

$(‘#enter‘).click(function() {
var xForward = $(‘#xForward‘).val();
var referer = $(‘#referer‘).val();
var userAgent = $(‘#userAgent‘).val();
var cookie = $(‘#cookieArea‘).val();
var randomip = $(‘#randomip‘).is(‘:checked‘);
var targeturl = $(‘#targeturl‘).is(‘:checked‘);
var exceptUrl = $(‘#exceptUrl‘).is(‘:checked‘);
var includeUrl = $(‘#includeUrl‘).is(‘:checked‘);
var exceptUrltext = $(‘#exceptUrltext‘).val();
var includeUrltext = $(‘#includeUrltext‘).val();
localStorage[‘xForward‘] = xForward;
localStorage[‘referer‘] = referer;
localStorage[‘userAgent‘] = userAgent;
localStorage[‘cookie‘] = cookie;
localStorage[‘randomip‘] = randomip;
localStorage[‘targeturl‘] = targeturl;
localStorage[‘exceptUrl‘] = exceptUrl;
localStorage[‘includeUrl‘] = includeUrl;
localStorage[‘exceptUrltext‘] = exceptUrltext;
localStorage[‘includeUrltext‘] = includeUrltext;
localStorage[‘isChange‘] = true;

$(‘#enter‘).attr({‘disabled‘: true});
$(‘#reset‘).attr({‘disabled‘:false});
})

$(‘#reset‘).click(function(){
$(‘#xForward‘).val(‘‘);
$(‘#referer‘).val(‘‘);
$(‘#userAgent‘).val(‘‘);
$(‘#cookieArea‘).val(‘‘);
$(‘#exceptUrltext‘).val(‘.google.com;.baidu.com;.qq.com‘);
$(‘#includeUrltext‘).val(‘‘);
$(‘#exceptUrl‘).attr({‘checked‘:true});
$(‘#includeUrl‘).removeAttr(‘checked‘);

localStorage[‘xForward‘]=‘‘;
localStorage[‘referer‘]=‘‘;
localStorage[‘userAgent‘]=‘‘;
localStorage[‘cookie‘]=‘‘;
localStorage[‘randomip‘]=false;
localStorage[‘targeturl‘]=false;
localStorage[‘isChange‘]=false;
localStorage[‘exceptUrl‘]=true;
localStorage[‘includeUrl‘]=false;
localStorage[‘exceptUrltext‘]=‘.google.com;.baidu.com;.qq.com‘;
localStorage[‘includeUrltext‘]=‘‘;

$(‘#enter‘).attr({‘disabled‘:false});
})
});

  background.js:

console.log(‘backgroud‘);
chrome.webRequest.onBeforeSendHeaders.addListener(function(details) {
var url = details.url;
if (isChange(url)) {
var headers = details.requestHeaders;
console.log("start request url:" + url);
var blockingResponse = modifyHeader(headers, url);
return blockingResponse;
}
}, {
urls : ["http://*/*", "https://*/*"]
}, ["requestHeaders", "blocking"]);

function isChange(_url){
var host = _url.split(‘/‘)[2];
if (localStorage[‘isChange‘] != ‘true‘){
return false;
}
if (localStorage[‘exceptUrl‘] == ‘true‘){
var exceptHost = localStorage[‘exceptUrltext‘].split(‘;‘);
for(var i=0; i<exceptHost.length; i++){
var reg = exceptHost[i].replace(/\./g,‘\\\.‘);
if(host.match(reg) != null){
return false;
}
}
}
else if (localStorage[‘includeUrl‘] == ‘true‘){
var includeUrl = localStorage[‘includeUrltext‘].split(‘;‘);
for(var i=0; i<includeUrl.length; i++){
var reg = includeUrl[i].replace(/\./g,‘\\\.‘);
if(host.match(reg) == null){
return false;
}
}
}
return true;
}

function modifyHeader(_headers, _url){
var blockingResponse = {};
var isxForward = false;
var isReferer = false;
var isuserAgent = false;
var iscookie = false;
for (var j = 0; j < _headers.length; j++){
//console.log(_headers[j].name + ‘:‘ + _headers[j].value);
if(_headers[j].name == "X-Forward-For" && (localStorage[‘xForward‘].length > 6 || localStorage[‘randomip‘] == ‘true‘)){
if(localStorage[‘xForward‘].length > 6){
_headers[j].value = localStorage[‘xForward‘];
}
else if (localStorage[‘randomip‘] == ‘true‘) {
_headers[j].value = Math.floor(Math.random()*225)+‘.‘+Math.floor(Math.random()*255)+‘.‘+Math.floor(Math.random()*255)+‘.‘+Math.floor(Math.random()*255);
}
isxForward = true;
}

if(_headers[j].name =="Referer"&&(localStorage[‘referer‘].length >6|| localStorage[‘targeturl‘]==‘true‘)){
//console.log(‘referer:‘+_headers[j].value);
if(localStorage[‘referer‘].length >6){
_headers[j].value = localStorage[‘referer‘];
}
elseif(localStorage[‘targeturl‘]==‘true‘){
_headers[j].value = _url;
}
isReferer =true;
}

if(_headers[j].name =="User-Agent"&& localStorage[‘userAgent‘].length >10){
_headers[j].value = localStorage[‘userAgent‘];
isuserAgent =true;
}

if(_headers[j].name =="Cookie"&& localStorage[‘cookie‘].length >0){
_headers[j].value = localStorage[‘cookie‘];
iscookie =true;
}
}
if(isxForward ==false){
if(localStorage[‘xForward‘].length >6){
_headers.push({name:‘X-Forwarded-For‘,value:localStorage[‘xForward‘]});
//_headers[‘X-Forward-For‘] = localStorage[‘xForward‘];
}
elseif(localStorage[‘randomip‘]==‘true‘){
_headers.push({name:‘X-Forwarded-For‘,value:Math.floor(Math.random()*225)+‘.‘+Math.floor(Math.random()*255)+‘.‘+Math.floor(Math.random()*255)+‘.‘+Math.floor(Math.random()*255)});
}
isxForward =true;
}
if(isReferer ==false){
if(localStorage[‘referer‘].length >6){
_headers.push({name:‘Referer‘,value:localStorage[‘referer‘]});
}
elseif(localStorage[‘targeturl‘]==‘true‘){
_headers.push({name:‘Referer‘,value:_url});
}
isReferer =true;
}
if(isuserAgent ==false){
if(localStorage[‘userAgent‘].length >10){
_headers[‘User-Agent‘]= localStorage[‘userAgent‘];
}
isuserAgent =true;
}
if(iscookie ==false){
if(localStorage[‘cookie‘].length >0){
_headers[‘Cookie‘]= localStorage[‘cookie‘];
}
iscookie =true;
}
blockingResponse.requestHeaders = _headers;

console.log(blockingResponse);
return blockingResponse;
}

  

  完整的项目以及源代码可以参见:https://github.com/vipscu/Change-Header/tree/master/header/Cheader

  

  本文欢迎转载,转载请注明原文地址:http://vipscu.blog.163.com/blog/static/181808372201343053644567/

时间: 2024-12-18 08:12:31

chrome http Request Header 修改插件的相关文章

[转]Google Chrome/IE/FireFox查看HTTP请求头request header响应头

chrome查看网页header,鼠标右键打开审查元素,或快捷键Shift+Ctrl+I或者shift+ctrl+c当我打开Network后,发现里面是空的什么也没有.查了下,才知,需要刷新页面才能显示出来. 想了想也是应该,只有重新载入网页,chrome才能捕获header信息. 据说这个功能很好很强大,可以用来找到隐藏的视频文件源地址.很多非专业人士用审查元素好像也就是来干这个. IE和FireFox查看页面header信息需要插件IE:HttpWatch,Fiddler2FireFox:F

调用Restful Service 出现415 Unsupported Media Type的问题(Rest Request Header中的Content-Type问题)

用Chrome的插件Simple REST Client 调用POST的REST服务时,老是报415错误,如图. 一开始就以为是服务端的问题,各种google,百度,折腾了一下午未果. 晚上继续看,一不小心看到返回的Response的Headers中Content-Type的值与冒号之间有一个空格,于是将Request的Content-Type:application/json;charset=UTF-8改成Content-Type: application/json;charset=UTF-8

简要描述客户端发送的http request header都包含哪些内容

http://blog.csdn.net/albert528108/article/details/21745167 2014-03-21 21:34 10829人阅读 评论(2) 收藏 举报  分类: Socket开发(5)  目录(?)[+] 问题描述: 请简要描述客户端发送的http request header都包含哪些内容? 解答: HTTP Request header 当今web程序的开发技术真是百家争鸣,ASP.NET, PHP, JSP,Perl, AJAX 等等. 无论Web

nginx优化:URI过长或request header过大导致400或414报错

当http 的URI太长或者request header过大时会报414 Request URI too large或400 bad request错误. 解决方法: 修改两个参数 参数一: #client_header_buffer_size:客户端请求头缓冲区大小,client_header_buffer_size 128k;#如果请求头总长度大于小于128k,则使用此缓冲区 参数二: #large_client_header_buffers:请求头总长度大于128k时使用large_cli

软键盘实例 request参数修改

软键盘实例 request参数修改 这里的键盘 里面的内容是乱序的,每次请求都会不一样的顺序. 键盘内容是一个DIV的背景图,方框是DIV边框.控制按钮直接在前台控制就行. 请求流程如下 JSP请求软键盘图片->action 绘制图片并记录 每个值对应的位置 JSP登录(密码位置)-->Filter把密码转换成真实密码值->登录校验Filter 代码如下 <%@ page isELIgnored="false" %> <%@ page languag

Cordova app 检查更新 ----创建项目、添加插件、修改插件(一)

使用Cordova 进行跨平台应用程序的开发 1.创建Cordova项目 $ cordova create hello com.example.hello HelloWorld 2.添加插件 2.1切换到Plugins目录 2.2 添加一下插件 cordova plugin add cordova-plugin-device cordova plugin add cordova-plugin-file cordova plugin add cordova-plugin-file-transfer

解决Bug:Size of a request header field exceeds server limit

用了cms 发现这玩意真不好,老是有各种奇芭的问题跳出来 有时浏览网页时会出现 Bad Request Your browser sent a request that this server could not understand. Size of a request header field exceeds server limit. 意思为:错误的请求.您的浏览器发送一个请求,该服务器无法理解.一个请求头域的大小超过服务器的限制. 以下是解决方法,不过,我个人感觉,不可能无限制的增大请求

HTTP Request header

原文:http://www.cnblogs.com/zhwl/archive/2012/02/28/2371691.html HTTP Request header 当今web程序的开发技术真是百家争鸣,ASP.NET, PHP, JSP,Perl, AJAX 等等. 无论Web技术在未来如何发展,理解Web程序之间通信的基本协议相当重要, 因为它让我们理解了Web应用程序的内部工作. 本文将对HTTP协议进行详细的实例讲解,内容较多,希望大家耐心看.也希望对大家的开发工作或者测试工作有所帮助.

信息: Error parsing HTTP request header Note: further occurrences of HTTP header parsing errors will be logged at DEBUG level.

Error parsing HTTP request header 最近在做一个SpringMvc项目的时候报错,错误如下: 信息: Error parsing HTTP request header Note: further occurrences of HTTP header parsing errors will be logged at DEBUG level. 显示错误的HTTP请求头,这里就很郁闷了,之前出现这个问题是因为提交数据超过了定义的header头内容, 那时候已经把tom