如何发送具有不同有效负载的多个请求?

时间:2019-05-14 23:46:02

标签: python python-requests

我正在尝试使用线程(具有不同的有效负载)发送多个请求。我做了一个循环,它可以遍历列表,但是它不适用于线程,线程只是重复列表中的第一个帐户。


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()

1 个答案:

答案 0 :(得分:0)

我在您的逻辑中看不到什么使我期望该代码(如果运行)会在您定义login方法时为多个线程执行产生不同的有效负载。也许您希望usernamepassword和/或url在每个线程运行中都不同,但是正如代码所示,这些变量未定义,因此您的login方法获得了成功根本不跑。

此代码存在足够的问题,因此我看不出它如何运行得足够远,甚至您的主要问题也无法发挥作用。我看到的问题是:

当您尝试解压缩将产生2个项目到3个变量的拆分时,您会在第一个for循环中遇到拆包错误。

您正在遍历accs列表,但是随后您在每次迭代内显式引用accs[0],而不使用迭代变量i。也许这是问题的根源,因为如果accs中有多个项目正确解包,则使用accs[0]意味着您将一遍又一遍地打印列表中的第一个条目。 / p>

在您的login函数中,usernamepasswordurl未定义。

您永远不会启动定义的第一个线程。

您使用for i in range(1):循环,该循环只会执行一次迭代,并且与先前的注释一起意味着您将只运行一个线程。

您创建了列表threads_list,并尝试根据列表的内容进行联接,但从未添加任何内容。