# Windows WinINet (desktop apps, .NET, Java)

Source: https://findproxyforurl.net/engines/wininet/ · updated 2026-10-11

Changed 2026-10-11: New engine profiles for Windows: "Windows (WinHTTP)" for Windows services, BITS and programs that use WinHTTP, and "Windows apps (WinINet, .NET, Java)" for programs that follow the Windows proxy settings, both observed in the lab on Windows 11 25H2; the tester can run a file in either of them.

Used by: apps using WinINet, .NET Framework, .NET, Java.


## Windows 11 WinINet (11-25H2)

Measured on Windows 11 25H2 in October 2026. Apps that use the system proxy settings through WinINet, .NET or Java see the host in lower case. Java and some Windows components also cut the path from http:// URLs. Test your file with this profile on /check/.


- alert() output: ignored. alert() exists and returns false, so calling it does not stop the script. (source: lab, verified 2026-10-11)
- Non-ASCII result rejected: false. Non-ASCII characters in the result are accepted. (source: lab, verified 2026-10-11)
- shExpMatch is case-sensitive: true. shExpMatch compares case-sensitively and knows only * and ?. Characters such as [ ] + ( ) $ | are taken literally, so some patterns match differently from Chrome. (source: lab, verified 2026-10-11)
- dnsResolve is IPv4 only: true. dnsResolve returns only IPv4 addresses, and it returns false, not null, when a name does not resolve. (source: lab, verified 2026-10-11)
- JavaScript level accepted: 2017. About ES2017: let, const, arrow functions, classes, template strings and array spread work. Optional chaining (?.), ?? , object spread {...o}, BigInt and newer regular expression syntax are syntax errors, and then the whole file fails to load. (source: lab, verified 2026-10-11)
- Calls FindProxyForURLEx if defined: true. If the file defines FindProxyForURLEx, Windows calls it instead of FindProxyForURL. A file with only FindProxyForURLEx works too. (source: lab, verified 2026-10-11)
- Microsoft *Ex functions: true. dnsResolveEx, isInNetEx, isResolvableEx, sortIpAddressList and myIpAddressEx are available. (source: lab, verified 2026-10-11)
- Global variables persist between calls: true. Global variables keep their values from one call to the next. (source: lab, verified 2026-10-11)
- IPv6 host passed in brackets: true. An IPv6 host reaches the script in brackets, for example [2001:db8::1]. (source: lab, verified 2026-10-11)
- Host lower-cased by the engine: true. WinINet, .NET and Java lower-case the host, and the scheme and host part of the URL, before the script runs. The path keeps its case. (source: lab, verified 2026-10-11)
- Largest PAC file accepted (bytes): 1048576. A PAC file larger than about 1 MiB is rejected. (source: lab, verified 2026-10-11)
- Functions built into the engine (native): isPlainHostName, dnsDomainIs, localHostOrDomainIs, isResolvable, isInNet, dnsResolve, myIpAddress, dnsDomainLevels, shExpMatch, weekdayRange, dateRange, timeRange, alert, isResolvableEx, isInNetEx, dnsResolveEx, myIpAddressEx, sortIpAddressList, getClientVersion. All 19 PAC functions, including the Microsoft *Ex functions, are built into the engine. The checker imitates them from the measured results. (source: lab, verified 2026-10-11)
- On exception: error. If the script throws an error, the program that asked for a proxy gets an error instead of an answer. Browsers go DIRECT in this case. (source: lab, verified 2026-10-11)
- On non-string / undefined result: stringify. A result that is not a string is turned into text and read as a proxy list. undefined, null or a number give no usable entry, so the connection goes direct; an array such as ["PROXY a:1"] works. (source: lab, verified 2026-10-11)
- How the returned string is read: windows. Windows reads the returned string loosely. An entry that contains DIRECT anywhere becomes DIRECT, so a missing ';' before DIRECT sends traffic direct. Lower-case keywords are skipped, a missing port becomes 80, and SOCKS5 is misread. The checker shows the list Windows actually uses. (source: lab, verified 2026-10-11)
- Proxy keywords understood: PROXY, HTTPS, SOCKS, DIRECT. HTTP is not a keyword here. SOCKS5 and SOCKS4 are read as SOCKS followed by a broken host name. (source: lab, verified 2026-10-11)
- URL passed to FindProxyForURL: https_to_origin. For https:// URLs the script sees only scheme, host and port, for example https://www.example.com:8443/. http:// URLs reach the script whole, with path, query and #fragment. (source: lab, verified 2026-10-11)
