关于jquery:如何在.ajax请求中向User-Agent头添加值?

How to add a value to User-Agent header in a .ajax request?

我正在尝试为Chrome创建一个插件,我从几个页面检索信息,其中一些是负载均衡器,需要一个特定的用户代理代码才能将我引导到正确的位置。

现在,我正在进行.ajax()调用,我尝试了几个例如:

1
2
3
4
5
$.ajaxSetup({
    beforeSend: function(request) {
        request.setRequestHeader("User-Agent","MyAgentCode");
    }
});

但它不起作用。

我也尝试过:

1
2
3
4
5
6
7
8
9
$.ajax({
    url:"http://blablabla.com/",
    dataType:'html',
    beforeSend: function (req) {
        req.setRequestHeader('User-Agent', 'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.83 Safari/537.1 MyAgentCode);
    },
    error: function() { alert("No data found");},
    success: parseResult
});

哪个也不起作用。

我只想为User-Agent添加一个值(保持原样)。 这将允许我从正确的服务器获取正确的信息。


您可以使用headers [],这比使用beforeSend更容易。这里只需按Ctrl-F'标题'。


如果我理解正确您的问题,您可以使用webRequest Chrome API。"使用chrome.webRequest模块拦截,阻止或修改飞行中的请求,并观察和分析流量。

http://developer.chrome.com/trunk/extensions/webRequest.html

有一个示例如何删除User-Agent。而不是删除,您可以使用您的值更改requestHeader的值。

1
2
3
4
5
6
7
8
9
10
11
12
 chrome.webRequest.onBeforeSendHeaders.addListener(
  function(details) {
    for (var i = 0; i < details.requestHeaders.length; ++i) {
      if (details.requestHeaders[i].name === 'User-Agent') {
        details.requestHeaders.splice(i, 1);
        break;
      }
    }
    return {requestHeaders: details.requestHeaders};
  },
  {urls: [""]},
  ["blocking","requestHeaders"]);


注意事项:

  • 你必须从网络服务器打开html,而不是文件:///处理程序。
  • 你必须确保你没有添加拼写错误,例如保持用户代理字符串引号打开。
  • 如果您想要发出GET请求,请删除/编辑type:"POST"

  • 使用BeforeSend和使用headers有两种方法可以编辑标题。它们都适用于$.ajax()$.post()方法。

例1:

1
2
3
4
5
$.post({
    url:"http://localhost:4000",
    data:"we=1",
    headers: {"User-Agent":"user agent 1"}
    });

例2:

1
2
3
4
5
6
7
$.ajax({
    url:"http://localhost:4000",
    type:"POST",
    data: {we:"2"},
    dataType:'text', // case you wanna especify the return type
    headers: {"User-Agent":"user agent 2"}
});

使用标题似乎更容易,也许只是对BeforeSend方法的一个切入点:

1
2
3
4
5
6
7
8
9
10
$.ajax({
    url:"http://localhost:4000",
    type:"POST",
    data: {we:"2"},
    dataType:'text',
    headers: {"User-Agent":"user agent 1"}
    beforeSend: function (req) {
        req.setRequestHeader('User-Agent', 'user agent changed to 2');
    }
});

如果你想检查结果...添加有点像:

1
2
error: function() { alert("No data found");},
success: function() { alert("uh yead");}

但是使用Firefox / Chrome开发工具(f12 - >网络标签)就足够了。
在zip文件中,我已经包含了PHP服务器启动命令和一个index.php文件来转储标头。

完整的工作示例文件集在此处上传:https://files.fm/u/4x3fc8ru

问候。