Hansimov commited on
Commit
70c1e23
1 Parent(s): ab87882

:gem: [Feature] Request cookies to bypass challenge

Browse files
conversations/conversation_creator.py CHANGED
@@ -1,17 +1,22 @@
1
  import requests
2
  from pprint import pprint
 
3
  from utils.enver import enver
4
  from networks import ConversationCreateHeadersConstructor
 
5
 
6
 
7
  class ConversationCreator:
8
  conversation_create_url = "https://www.bing.com/turing/conversation/create"
9
 
10
  def __init__(self, cookies: dict = {}):
11
- self.cookies = cookies
12
 
13
  def construct_cookies(self):
14
- pass
 
 
 
15
 
16
  def construct_headers(self):
17
  # New Bing 封锁原理探讨 #78
@@ -26,6 +31,7 @@ class ConversationCreator:
26
  self.conversation_create_url,
27
  headers=self.request_headers,
28
  proxies=enver.requests_proxies,
 
29
  )
30
  try:
31
  self.response_data = self.response.json()
 
1
  import requests
2
  from pprint import pprint
3
+ from utils.logger import logger
4
  from utils.enver import enver
5
  from networks import ConversationCreateHeadersConstructor
6
+ from networks import CookiesConstructor
7
 
8
 
9
  class ConversationCreator:
10
  conversation_create_url = "https://www.bing.com/turing/conversation/create"
11
 
12
  def __init__(self, cookies: dict = {}):
13
+ self.request_cookies = cookies
14
 
15
  def construct_cookies(self):
16
+ cookies_constructor = CookiesConstructor()
17
+ if not self.request_cookies:
18
+ cookies_constructor.construct()
19
+ self.request_cookies = cookies_constructor.cookies
20
 
21
  def construct_headers(self):
22
  # New Bing 封锁原理探讨 #78
 
31
  self.conversation_create_url,
32
  headers=self.request_headers,
33
  proxies=enver.requests_proxies,
34
+ cookies=self.request_cookies,
35
  )
36
  try:
37
  self.response_data = self.response.json()
networks/__init__.py CHANGED
@@ -1,5 +1,5 @@
1
- from .chathub_request_payload_constructor import ChathubRequestPayloadConstructor
2
  from .cookies_constructor import CookiesConstructor
 
3
  from .conversation_request_headers_constructor import (
4
  ConversationRequestHeadersConstructor,
5
  )
 
 
1
  from .cookies_constructor import CookiesConstructor
2
+ from .chathub_request_payload_constructor import ChathubRequestPayloadConstructor
3
  from .conversation_request_headers_constructor import (
4
  ConversationRequestHeadersConstructor,
5
  )
networks/cookies_constructor.py CHANGED
@@ -1,8 +1,100 @@
 
 
 
 
 
 
 
 
1
  class CookiesConstructor:
2
- def __init__(self) -> None:
3
- self.cookies_list = [] # Dumped from Cookie-Editor extension in Browser
4
 
5
- def construct(self):
6
  self.cookies = {}
7
- for cookie in self.cookies_list:
8
- self.cookies[cookie["name"]] = cookie["value"]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import json
2
+ import requests
3
+ from datetime import datetime
4
+ from pathlib import Path
5
+
6
+ from utils.logger import logger
7
+
8
+
9
  class CookiesConstructor:
10
+ bypass_url = "https://zklcdc-go-bingai-pass.hf.space"
 
11
 
12
+ def __init__(self):
13
  self.cookies = {}
14
+ self.secrets_path = Path(__file__).parents[1] / "secrets.json"
15
+ self.created_datetime_format = "%Y-%m-%d %H:%M:%S"
16
+
17
+ def create_secrets_json(self):
18
+ if not self.secrets_path.exists():
19
+ self.secrets_path.parent.mkdir(parents=True, exist_ok=True)
20
+ with open(self.secrets_path, "w") as wf:
21
+ json.dump({}, wf)
22
+
23
+ def is_local_cookies_valid(self):
24
+ self.create_secrets_json()
25
+ if self.secrets_path.exists():
26
+ with open(self.secrets_path, "r") as f:
27
+ secrets = json.load(f)
28
+ if secrets.get("cookies"):
29
+ cookies = secrets["cookies"]
30
+ cookies_str = cookies.get("cookies_str")
31
+ cookies_created_datetime = datetime.strptime(
32
+ cookies.get("created_time"), self.created_datetime_format
33
+ )
34
+ datetime_now = datetime.now()
35
+ # if cookies created more than 12 hours, then it's invalid
36
+ self.cookies_created_seconds = (
37
+ datetime_now - cookies_created_datetime
38
+ ).seconds
39
+ if self.cookies_created_seconds < 12 * 60 * 60:
40
+ self.cookies_str = cookies_str
41
+ self.cookies_created_datetime = cookies_created_datetime
42
+ return True
43
+ else:
44
+ return False
45
+ return False
46
+
47
+ def requests_cookies(self):
48
+ if self.is_local_cookies_valid():
49
+ logger.success(
50
+ f"Local Cookies Used: {self.cookies_created_datetime} "
51
+ f"({round(self.cookies_created_seconds/60/60,2)} hours ago)"
52
+ )
53
+ return
54
+
55
+ requests_body = {"cookies": ""}
56
+ try:
57
+ res = requests.post(
58
+ self.bypass_url,
59
+ json=requests_body,
60
+ timeout=15,
61
+ )
62
+ data = res.json()
63
+ cookies_str = data["result"]["cookies"]
64
+ cookies_snapshot = data["result"]["snapshot"]
65
+ logger.note(f"Get Cookies: {cookies_str}")
66
+ if cookies_str:
67
+ with open(self.secrets_path, "r") as rf:
68
+ secrets = json.load(rf)
69
+ secrets["cookies"] = {
70
+ "cookies_str": cookies_str,
71
+ "created_time": datetime.now().strftime(
72
+ self.created_datetime_format
73
+ ),
74
+ "snapshot": self.bypass_url + cookies_snapshot,
75
+ }
76
+ with open(self.secrets_path, "w") as wf:
77
+ json.dump(secrets, wf)
78
+ except Exception as e:
79
+ cookies_str = ""
80
+ logger.err(e)
81
+
82
+ self.cookies_str = cookies_str
83
+
84
+ def cookies_str_to_dict(self):
85
+ cookie_items = self.cookies_str.split(";")
86
+ for cookie_item in cookie_items:
87
+ if not cookie_item:
88
+ continue
89
+ cookie_key, cookie_value = cookie_item.split("=", 1)
90
+ self.cookies[cookie_key.strip()] = cookie_value.strip()
91
+ logger.success(f"Cookies: {self.cookies}")
92
+
93
+ def construct(self):
94
+ self.requests_cookies()
95
+ self.cookies_str_to_dict()
96
+
97
+
98
+ if __name__ == "__main__":
99
+ cookies_constructor = CookiesConstructor()
100
+ cookies_constructor.construct()