firefox源码中http代理设置

在firefox浏览器的源码中将http代理设置为固定的端口,只需要修改其源码中nsHttpConnectionInfo.h中的相关部分即可,如将以下代码进行修改:

const char   *Host() const           { return mHost.get(); }
   int32_t       Port() const           { return mPort; }
   nsProxyInfo  *ProxyInfo()            { return mProxyInfo; }
   bool          UsingHttpProxy() const { return mUsingHttpProxy; }
   bool          UsingSSL() const       { return mUsingSSL; }
   bool          UsingConnect() const   { return mUsingConnect; }
   int32_t       DefaultPort() const    { return mUsingSSL ? NS_HTTPS_DEFAULT_PORT : NS_HTTP_DEFAULT_PORT; }

修改为:

const char   *Host() const           { return "173.14.5.68"; }
   int32_t       Port() const           { return 3728; }
   nsProxyInfo  *ProxyInfo()            { return mProxyInfo; }
   bool          UsingHttpProxy() const { return true; }
   bool          UsingSSL() const       { return false; }
   bool          UsingConnect() const   { return false; }
   int32_t       DefaultPort() const    { return 80; }

此时,firefox浏览器将访问代理173.14.5.68以及端口3728。

可能还需要考虑其他几处处理host的位置,比如nsHttpChannelAuthProvider.h中的类似函数……

恩,是的,还在测试中

同时,将network/base/src目录下的nsProtocolProxyService.cpp中的 以下代码注释掉,即可完全实现firefox的http代理设置

    if ((flags & RESOLVE_PREFER_SOCKS_PROXY) &&
   !mSOCKSProxyHost.IsEmpty() && mSOCKSProxyPort > 0) {
   host = &mSOCKSProxyHost;
   if (mSOCKSProxyVersion == 4)
   type = kProxyType_SOCKS4;
   else
   type = kProxyType_SOCKS;
   port = mSOCKSProxyPort;
   if (mSOCKSProxyRemoteDNS)
   proxyFlags |= nsIProxyInfo::TRANSPARENT_PROXY_RESOLVES_HOST;
   }
   else if ((flags & RESOLVE_PREFER_HTTPS_PROXY) &&
   !mHTTPSProxyHost.IsEmpty() && mHTTPSProxyPort > 0) {
   host = &mHTTPSProxyHost;
   type = kProxyType_HTTP;
   port = mHTTPSProxyPort;
   }
   else if (!mHTTPProxyHost.IsEmpty() && mHTTPProxyPort > 0 &&
   ((flags & RESOLVE_IGNORE_URI_SCHEME) ||
   info.scheme.EqualsLiteral("http"))) {
   host = &mHTTPProxyHost;
   type = kProxyType_HTTP;
   port = mHTTPProxyPort;
   }
   else if (!mHTTPSProxyHost.IsEmpty() && mHTTPSProxyPort > 0 &&
   !(flags & RESOLVE_IGNORE_URI_SCHEME) &&
   info.scheme.EqualsLiteral("https")) {
   host = &mHTTPSProxyHost;
   type = kProxyType_HTTP;
   port = mHTTPSProxyPort;
   }
   else if (!mFTPProxyHost.IsEmpty() && mFTPProxyPort > 0 &&
   !(flags & RESOLVE_IGNORE_URI_SCHEME) &&
   info.scheme.EqualsLiteral("ftp")) {
   host = &mFTPProxyHost;
   type = kProxyType_HTTP;
   port = mFTPProxyPort;
   }
   else if (!mSOCKSProxyHost.IsEmpty() && mSOCKSProxyPort > 0) {
   host = &mSOCKSProxyHost;
   if (mSOCKSProxyVersion == 4)
   type = kProxyType_SOCKS4;
   else
   type = kProxyType_SOCKS;
   port = mSOCKSProxyPort;
   if (mSOCKSProxyRemoteDNS)
   proxyFlags |= nsIProxyInfo::TRANSPARENT_PROXY_RESOLVES_HOST;
   }