我正在尝试使用线程(具有不同的有效负载)发送多个请求。我做了一个循环,它可以遍历列表,但是它不适用于线程,线程只是重复列表中的第一个帐户。
accs = ["testaccount1:password1", "testacc1:pw1"]
for i in accs:
username, password, new_email = accs[0].split(":")
print(username, password, new_email)
def login():
payload = {'grant_type': 'password','username': username,'password': password,'session-data': '{"browser-name":"Chrome","browser-version":"73.0.3683.103","os-name":"Windows","os-version":"10","device-model":"","device-manufacturer":"","device-name":"Windows"}','client_id': '228TQF','access_token': 'on','enableRefreshToken': 'true','scope': 'movie name type',}
with requests.Session() as s:
p = s.post(url, data=payload)
data = p.content
data = json.loads(data)
token = data['access_token']
print(token)
print(p.content)
headers = {'Accept': 'application/json, text/javascript, */*; q=0.01','Authorization': 'Bearer ' + token,'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8','Origin': 'https://www.testsite.com','Referer': 'https://www.testsite./settings/','User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36'}
t = threading.Thread(target = login, name = 'thread1', args = (14, 'thread1'))
threads_list = []
for i in range(1):
t = threading.Thread(target = login, name = 'thread{}'.format(i), args= (5, 'thread{}'.format(i)))
t.start()
print('{} has started'.format(t.name))
for t in threads_list:
t.join()
end = time.time()
答案 0 :(得分:0)
我在您的逻辑中看不到什么使我期望该代码(如果运行)会在您定义login
方法时为多个线程执行产生不同的有效负载。也许您希望username
,password
和/或url
在每个线程运行中都不同,但是正如代码所示,这些变量未定义,因此您的login
方法获得了成功根本不跑。
此代码存在足够的问题,因此我看不出它如何运行得足够远,甚至您的主要问题也无法发挥作用。我看到的问题是:
当您尝试解压缩将产生2个项目到3个变量的拆分时,您会在第一个for
循环中遇到拆包错误。
您正在遍历accs
列表,但是随后您在每次迭代内显式引用accs[0]
,而不使用迭代变量i
。也许这是问题的根源,因为如果accs
中有多个项目正确解包,则使用accs[0]
意味着您将一遍又一遍地打印列表中的第一个条目。 / p>
在您的login
函数中,username
,password
和url
未定义。
您永远不会启动定义的第一个线程。
您使用for i in range(1):
循环,该循环只会执行一次迭代,并且与先前的注释一起意味着您将只运行一个线程。
您创建了列表threads_list
,并尝试根据列表的内容进行联接,但从未添加任何内容。