IIS处理brower的一个页面请求(www.test.com/SX?a=1)的处理流程

本文详细介绍了IIS处理浏览器页面请求的过程,包括从域名解析到动态页面处理的各个阶段。同时深入探讨了ASP.NET的工作机制及HTTP模块如何在处理过程中发挥作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

IIS处理brower的一个页面请求(

www.test.com/SX?a=1)的处理流程:
1。网址 www.test.com/SX?a=1,通过域名服务器解析出 www.test.com所对应的ip地址
2。根据ip地址,生成http包,通过 http get的方式传到指定服务器,被iis截获http请求
//以下是服务器端iis的处理
3。iis根据http头,把虚拟目录SX,转换为对应的物理路径
4。iis根据物理路径,搜索请求的文件,这里 www.test.com/SX?a=1没有指明具体文件,则取 iis里面设置的默认主页面名称,iis里一般配置成default.htm,index.htm等。
//以下是动态语言的服务器进程的处理
5。根据所请求文件的后缀名,iis决定是否调用ISAPI过滤器,ISAPI过滤器是一个标准com组件,负责处理iis不能处理的文件,比如(.aspx文件)。
因为iis本身是不支持动态页面的,所以需要处理动态页面的时候,iis会根据 配置的ISAPI过滤器,决定该调用哪个 处理程序。如果没有对应的处理程序,iis会原封不动的返回页面的html代码给brower
6。如果是.aspx文件(也可以是其他扩展名,.aspx只是iis默认的asp.net页面),iis则调用asp.net处理进程
7。asp.net处理进程 根据.aspx页面配置的 后台代码类,调用相应编译好的类,完成后台代码处理,然后生产html文件
8。html页面生成完成后,iis 生成http头信息
9。iis生产http包,包括http头+html,传给相应 brower
10。brower解析http之后,根据html文件,找出引用文件,比如.JS,.CSS文件,向server请求下载这些文件
11。iis获取请求,发送这些文件。
12。brower接受完文件后,解释生产相应页面。显示出来了

//
在asp.net中如果需要处理 对 isapi filter的处理,只需实现ihttpmodule接口。

要实现HttpModule功能需要如下步骤:
1.编写一个类,实现IhttpModule接口
2.实现Init 方法,并且注册需要的方法
3.实现注册的方法
4.实现Dispose方法,如果需要手工为类做一些清除工作,可以添加Dispose方法的实现,但这不是必需的,通常可以不为Dispose方法添加任何代码。

5.在Web.config文件中,注册您编写的类
到这里我们还需要了解一个Asp.Net的运行过程:
在图中第二步可以看到当请求开始的时候,马上就进入了HttpModule,如果你自己重写了此方法,则在这里就进入你实现了ihttpmodel的对象了

HttpModule执行的顺序取决于web.config配置HttpModule的顺序,而HttpModule中事件的执行先后顺序与asp.net运行机制相关,具体执行顺序如下:

BeginRequest
AuthenticateRequest
AuthorizeRequest
ResolveRequestCache
AcquireRequestState
PreRequestHandlerExecute
PostRequestHandlerExecute
ReleaseRequestState
UpdateRequestCache
EndRequest


此外,有三个不确定的顺序:
PreSendRequestHeaders
PreSendRequestContent
Error

举个例子:
如果你在web.config配置了两个HttpModule,分别是HttpModuleA,HttpModuleB

这个事件执行的顺序如下:
HttpModuleA->BeginRequest
HttpModuleB->BeginRequest
HttpModuleA->AuthenticateRequest
HttpModuleB->AuthenticateRequest
HttpModuleA->AuthorizeRequest
HttpModuleB->AuthorizeRequest
...以此类推
D:\python\python.exe C:\Users\PC\Desktop\商品销售数据分析可视化系统\spiderMain\spider1.py Traceback (most recent call last): File "C:\Users\PC\Desktop\商品销售数据分析可视化系统\spiderMain\spider1.py", line 123, in <module> spider_fn('食品') File "C:\Users\PC\Desktop\商品销售数据分析可视化系统\spiderMain\spider1.py", line 114, in spider_fn main() File "C:\Users\PC\Desktop\商品销售数据分析可视化系统\spiderMain\spider1.py", line 93, in main search_product(key) File "C:\Users\PC\Desktop\商品销售数据分析可视化系统\spiderMain\spider1.py", line 23, in search_product brower.find_element(By.XPATH,'//*[@id="J_TSearchForm"]/div[2]').click() File "D:\python\lib\site-packages\selenium\webdriver\remote\webelement.py", line 88, in click self._execute(Command.CLICK_ELEMENT) File "D:\python\lib\site-packages\selenium\webdriver\remote\webelement.py", line 396, in _execute return self._parent.execute(command, params) File "D:\python\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 435, in execute self.error_handler.check_response(response) File "D:\python\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 247, in check_response raise exception_class(message, screen, stacktrace) selenium.common.exceptions.ElementNotInteractableException: Message: element not interactable: element has zero size (Session info: chrome=101.0.4951.64) Stacktrace: Backtrace: Ordinal0 [0x00ACB8F3+2406643] Ordinal0 [0x00A5AF31+1945393] Ordinal0 [0x0094C748+837448] Ordinal0 [0x0097A72A+1025834] Ordinal0 [0x00970083+983171] Ordinal0 [0x0099427C+1131132] Ordinal0 [0x0096FA64+981604] Ordinal0 [0x00994494+1131668] Ordinal0 [0x009A4682+1197698] Ordinal0 [0x00994096+1130646] Ordinal0 [0x0096E636+976438] Ordinal0 [0x0096F546+980294] GetHandleVerifier [0x00D39612+2498066] GetHandleVerifier [0x00D2C920+2445600] GetHandleVerifier [0x00B64F2A+579370] GetHandleVerifier [0x00B63D36+574774] Ordinal0 [0x00A61C0B+1973259] Ordinal0 [0x00A66688+1992328] Ordinal0 [0x00A66775+1992565] Ordinal0 [0x00A6F8D1+2029777] BaseThreadInitThunk [0x7540FCC9+25] RtlGetAppContainerNamedObjectPath [0x775D809E+286] RtlGetAppContainerNamedObjectPath [0x775D806E+238] 进程已结束,退出代码为 1为什么报错from selenium import webdriver import pandas as pd from sqlalchemy import create_mock_engine, create_engine import time import re import csv import os from selenium.webdriver.chrome.service import Service from selenium.webdriver.chrome.options import Options from selenium.webdriver.common.by import By # con = connect(host='localhost',user='root',password='root',database='goodsdata',port=3306) def spider_fn(key): def init(): if os.path.exists('./data.csv'): os.remove('./data.csv') with open('./data.csv','a',encoding='utf-8',newline='') as f: myWrite = csv.writer(f) myWrite.writerow(['type','title', 'price', 'buy_len', 'img_src', 'name', 'address', 'isFreeDelivery', 'href', 'nameHref']) def search_product(key): brower.find_element(By.ID,"q").send_keys(key) brower.find_element(By.XPATH,'//*[@id="J_TSearchForm"]/div[2]').click() time.sleep(5) def get_product(count): items = brower.find_elements(By.XPATH,'//div[@class="Content--contentInner--QVTcU0M"]/div') scroll_position = 0 scroll_amount = 200 max_scroll = 4200 for div in items: count = count + 1 try: # 类型 type = key # 商品名 title = div.find_element(By.XPATH, './/div[@class="Title--title--jCOPvpf"]/span').text # print(type,title) # 价格 price = div.find_element(By.XPATH, './/div[@class="Price--priceWrapper--Q0Dn7pN "]/span[@class="Price--priceInt--ZlsSi_M"]').text + \ div.find_element(By.XPATH, './/div[@class="Price--priceWrapper--Q0Dn7pN "]/span[@class="Price--priceFloat--h2RR0RK"]').text # 销量 buy_len = div.find_element(By.XPATH, './/div[@class="Price--priceWrapper--Q0Dn7pN "]/span[@class="Price--realSales--FhTZc7U"]').text buy_len = re.search('\d+', buy_len).group() # 商品图片 img_src = div.find_element(By.XPATH, './/img[@class="MainPic--mainPic--rcLNaCv"]').get_attribute('src') # 店铺名 name = div.find_element(By.XPATH, './/a[@class="ShopInfo--shopName--rg6mGmy"]').text # 地址 address = div.find_element(By.XPATH, './/span[@class="Price--procity--_7Vt3mX"]').text # 包邮情况 isFreeDelivery = '' try: isFreeDeliveryList = div.find_elements(By.XPATH, './/div[@class="SalesPoint--subIconWrapper--s6vanNY "]/div/span') isFreeDelivery = '不包邮' for i in isFreeDeliveryList: if i.text == '包邮': isFreeDelivery = '包邮' except: isFreeDelivery = '不包邮' print(isFreeDelivery) # 详情链接 href = div.find_element(By.XPATH, './/a[@class="Card--doubleCardWrapper--L2XFE73"]').get_attribute( 'href') # 店铺详情 nameHref = div.find_element(By.XPATH, './/a[@class="ShopInfo--shopName--rg6mGmy"]').get_attribute( 'href') # print(title) save_to_csv(type,title,price,buy_len,img_src,name,address,isFreeDelivery,href,nameHref) except: count -= 1 continue if scroll_position < max_scroll: scroll_script = f"window.scrollBy(0, {scroll_amount});" brower.execute_script(scroll_script) scroll_position += scroll_amount print(scroll_position) if count % 10 == 0: print('已经爬取%d条数据了' % count) else: div.find_element(By.XPATH,'//button[@class="next-btn next-medium next-btn-normal next-pagination-item next-next"]').click() print('正在翻页') time.sleep(10) get_product(count) print(items) def main(): # init() count = 0 search_product(key) get_product(count) # save_to_sql() def save_to_csv(type,title, price, buy_len,img_src, name, address, isFreeDelivery, href, nameHref): with open('./data.csv','a',encoding='utf-8',newline='') as f: myWirter = csv.writer(f,dialect='excel',delimiter=',') myWirter.writerow([type,title, price, buy_len,img_src, name, address, isFreeDelivery, href, nameHref]) def save_to_sql(): products = pd.read_csv('./data.csv') df = pd.DataFrame(products) conn = create_engine('mysql+pymysql://root:040511@localhost:3306/goodsdata?charset=utf8') df = df_clean(df) df.to_sql('products',con=conn,index=False,if_exists='append') print('导入数据库成功') def df_clean(df): df.fillna('暂无',inplace=True) return df main() if __name__ == '__main__': service = Service('./chromedriver.exe') options = webdriver.ChromeOptions() options.add_experimental_option("debuggerAddress", "localhost:9222") brower = webdriver.Chrome(service=service, options=options) brower.execute_cdp_cmd('Page.addScriptToEvaluateOnNewDocument', { 'source': 'Object.defineProperty(navigator, "webdriver", {get: () => undefined})'}) brower.get('https://www.taobao.com/') spider_fn('食品')
06-05
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值