没有 URL 列表的多线程请求
Multithreading requests without a URL list
我目前正在尝试通过多线程处理来加快我的请求,但我不确定如何按照我想要的方式进行。我知道 grequests,但它们似乎需要一个 URL 列表。我有一个起始编号包含在 URL 中的代码,并希望所有线程在获得 status_code 的 200
后停止
我曾尝试通过 grequests 来完成此操作,但未能成功。还尝试了线程化,但不知道如何在工作后停止所有线程 URL was found
import requests
import webbrowser
def url_request(number):
url = "http://website.com/download/" + str(number) + ".zip"
r = requests.head(url)
if r.status_code == 404:
print(url + " - 404 Not Found!")
number += 1
url_request(number)
elif r.status_code == 200:
webbrowser.open(url)
print(url + " - 200 Found!")
if __name__ == "__main__":
url_request(int(input("Starting number: ")))
我想要代码做的是在 "Starting number" 之后使用数字一次执行多个 request.head
并且将在其中一个线程找到 url 和 [=20= 之后停止] 200.
好的,明白了。谢谢你的建议。
代码如下:
from gevent import monkey
monkey.patch_all()
import grequests
import webbrowser
def url_request_threaded(startnumber, stopnumber):
urls = []
for i in range(startnumber, stopnumber):
urls.append("http://website.com/download/" + str(i) + ".zip")
gr = (grequests.head(url, stream=False) for url in urls)
gresponses = grequests.imap(gr, size=10)
try:
for response in gresponses:
if response.status_code == 404:
print(response.url + " - 404 Not Found!")
elif response.status_code == 200:
webbrowser.open(response.url)
print(response.url + " - 200 Found!")
raise SystemExit
except SystemExit:
pass
if __name__ == "__main__":
while True:
try:
startn = input("Starting number: ")
startn = int(startn)
stopn = input("End number: ")
stopn = int(stopn)
url_request_threaded(b, v, startn, stopn)
except ValueError:
print("Must be a number!")
continue
break
我目前正在尝试通过多线程处理来加快我的请求,但我不确定如何按照我想要的方式进行。我知道 grequests,但它们似乎需要一个 URL 列表。我有一个起始编号包含在 URL 中的代码,并希望所有线程在获得 status_code 的 200
后停止我曾尝试通过 grequests 来完成此操作,但未能成功。还尝试了线程化,但不知道如何在工作后停止所有线程 URL was found
import requests
import webbrowser
def url_request(number):
url = "http://website.com/download/" + str(number) + ".zip"
r = requests.head(url)
if r.status_code == 404:
print(url + " - 404 Not Found!")
number += 1
url_request(number)
elif r.status_code == 200:
webbrowser.open(url)
print(url + " - 200 Found!")
if __name__ == "__main__":
url_request(int(input("Starting number: ")))
我想要代码做的是在 "Starting number" 之后使用数字一次执行多个 request.head
并且将在其中一个线程找到 url 和 [=20= 之后停止] 200.
好的,明白了。谢谢你的建议。
代码如下:
from gevent import monkey
monkey.patch_all()
import grequests
import webbrowser
def url_request_threaded(startnumber, stopnumber):
urls = []
for i in range(startnumber, stopnumber):
urls.append("http://website.com/download/" + str(i) + ".zip")
gr = (grequests.head(url, stream=False) for url in urls)
gresponses = grequests.imap(gr, size=10)
try:
for response in gresponses:
if response.status_code == 404:
print(response.url + " - 404 Not Found!")
elif response.status_code == 200:
webbrowser.open(response.url)
print(response.url + " - 200 Found!")
raise SystemExit
except SystemExit:
pass
if __name__ == "__main__":
while True:
try:
startn = input("Starting number: ")
startn = int(startn)
stopn = input("End number: ")
stopn = int(stopn)
url_request_threaded(b, v, startn, stopn)
except ValueError:
print("Must be a number!")
continue
break