如何在.ajax请求中向User-Agent标头添加值?

时间:2012-10-29 18:27:09

标签: jquery ajax google-chrome-extension user-agent

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

现在,我正在进行.ajax()电话,我尝试过以下几项内容:

$.ajaxSetup({
    beforeSend: function(request) {
        request.setRequestHeader("User-Agent","MyAgentCode");
    }
});

但是它不起作用

我也尝试过:

$.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添加一个值(保持原样)。这将允许我从正确的服务器获取正确的信息。

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

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

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

 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: ["<all_urls>"]},
  ["blocking", "requestHeaders"]);

答案 2 :(得分:0)

考虑:

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

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

示例1:

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

示例2:

$.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方法的一个重点:

$.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');
    }
});

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

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

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

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

问候。