0

I'm trying to setup a proxy.pac file that may be used for IE6 clients. This is basically it:

function FindProxyForURL(url, host) {
    if (shExpMatch(host, "*example.com*")) return "DIRECT";

    return "PROXY 1.2.3.4:8080";
}

This file tells the browser that any client trying to go to a host matching "*example.com*" should use a direct connection, otherwise use the proxy.

This works fine in essentially any browser, but IE6 never matches the shExpMatch no matter what I try. I've read this and disabled the cache as described here, but to no avail.

I'm positive IE6 supports the shExpMatch function, but if someone wants to correct me, I'd be glad to hear it. Incidentally, this is running on WinXP SP2.

Harley
  • 2,177
  • 6
  • 25
  • 29

2 Answers2

2

I know that you've already solved it, but for others who stumble upon this there is a limitation (by design) in IE for the shExpMatch function in a PAC file in that only the * and the ? regexp wildcards are supported. An alternative is to use a regex object and call the test method on it passing in host or url as the parameter:

var regex = /*example.com*/;
if(regex.test(host))
    return "DIRECT";
return "PROXY 1.2.3.4:8080";
squillman
  • 37,618
  • 10
  • 90
  • 145
  • Anyone spot the annoying bug here? Everything between /* and */ is regarded as a comment, so you get a syntax error. To do this sort of thing, you'll have to use "var regex = new RegExp('...')" – Harley Jul 03 '09 at 00:11
  • `/*example.com*/` doesn't look like a valid regexp anyway. – Craig McQueen Sep 30 '14 at 05:47
1

Here's a slightly modified WPAD.DAT I'm using at a Customer site. It's working fine on IE6, unmodified... (because they won't give me the go-ahead to upgrade to IE8). The only modifications I put in were to obscure the Customer's domain names.

function FindProxyForURL(url, host) {

  if ( isPlainHostName(host) ) { return "DIRECT"; }

  if ( shExpMatch(url, "https:*") ) { return "DIRECT"; }

  if ( shExpMatch(url,"http://*.customer.domain.com")) { return "DIRECT"; }

  if ( isInNet(host,"127.0.0.1", "255.255.255.255") ) { return "DIRECT"; }

  if ( isInNet(host,"10.35.0.0", "255.255.0.0") ) { return "DIRECT"; }

  if ( isInNet(host,"192.168.0.0", "255.255.0.0") ) { return "DIRECT"; }

  return "PROXY proxy.customer.domain.com:8080";
}

The only difference that I see is that you're not matching "http:" at the beginning, but that shouldn't matter.

You're not supposed to do it, but you can put alert() statements in and IE6 will display them. You may be able to get some traction in debugging by doing that.

Evan Anderson
  • 141,071
  • 19
  • 191
  • 328
  • I also noticed he's matching against "host" vs. "url" in your example. Not sure if that matters either. – Kevin Kuphal Jul 02 '09 at 02:18
  • It's all good. I was watching the proxy logs and example.com kept appearing. I found out after hours of debugging that this was because the transparent proxy was being used. Grrr. – Harley Jul 02 '09 at 02:22