(method: str, url: str, *, data=None, files=None, stream=False)
| 711 | |
| 712 | |
| 713 | def browser_fetch(method: str, url: str, *, data=None, files=None, stream=False): |
| 714 | prefs = browser_prefs() |
| 715 | sess = browser_session() |
| 716 | country = prefs.get("country", "US") |
| 717 | vpn_enabled = bool(prefs.get("vpn_enabled", False)) |
| 718 | tor_enabled = bool(prefs.get("tor_enabled", False)) |
| 719 | mode = prefs.get("mode", "smart") |
| 720 | |
| 721 | if not vpn_enabled or mode == "direct": |
| 722 | session.pop("last_proxy", None) |
| 723 | return direct_fetch(sess, method, url, data=data, files=files, stream=stream), "direct" |
| 724 | |
| 725 | if tor_enabled: |
| 726 | try: |
| 727 | session.pop("last_proxy", None) |
| 728 | return tor_fetch(sess, method, url, data=data, files=files, stream=stream), "tor" |
| 729 | except Exception as e: |
| 730 | if mode == "strict": |
| 731 | raise RuntimeError(str(e)) |
| 732 | |
| 733 | if mode == "strict": |
| 734 | return proxied_fetch(sess, method, url, country, data=data, files=files, stream=stream), "proxy" |
| 735 | |
| 736 | proxy_error = None |
| 737 | try: |
| 738 | return proxied_fetch(sess, method, url, country, data=data, files=files, stream=stream), "proxy" |
| 739 | except Exception as e: |
| 740 | proxy_error = str(e) |
| 741 | |
| 742 | session.pop("last_proxy", None) |
| 743 | resp = direct_fetch(sess, method, url, data=data, files=files, stream=stream) |
| 744 | if proxy_error: |
| 745 | resp.headers["X-Free-Internet-Fallback"] = "proxy-refresh-failed" |
| 746 | return resp, "direct" |
| 747 | |
| 748 | # ---------------- vault ---------------- |
| 749 | def db_connect() -> sqlite3.Connection: |
no test coverage detected