在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;
}