0

我正在尝试为 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(保持其余部分不变)。这将使我能够从正确的服务器获取正确的信息。

4

3 回答 3

2

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

于 2012-10-30T22:54:16.570 回答
1

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

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

有一个如何删除用户代理的示例。而不是删除,您可以使用您的值更改 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"]);
于 2012-10-30T18:02:05.713 回答
0

注意事项:

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

  • 有 2 种方法来编辑标题,使用BeforeSend和使用headers. 它们都使用$.ajax()and$.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"}
});

使用 headers 似乎更容易,也许只是 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 -> 网络选项卡)就足够了。在 zip 文件中,我包含了 PHP 服务器启动命令以及一个 index.php 文件来转储标题。

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

问候。

于 2017-02-16T19:38:14.177 回答