当前位置: 首页 > news >正文

做网页到哪个网站找素材页面设计原型图

做网页到哪个网站找素材,页面设计原型图,广告设计实习报告,沈阳做网站黑酷科技🔸 第一部分:requests库的入口 我们从requests库的入口开始,通常我们会使用 requests.get() 或 requests.post() 等方法发送HTTP请求。那么,这些方法背后究竟做了些什么呢?我们从requests.get()方法开始看起&#xff…

🔸 第一部分:requests库的入口

我们从requests库的入口开始,通常我们会使用 requests.get()requests.post() 等方法发送HTTP请求。那么,这些方法背后究竟做了些什么呢?我们从requests.get()方法开始看起:

# requests/__init__.py
def get(url, params=None, **kwargs):"""Sends a GET request."""return request('get', url, params=params, **kwargs)

🔹 requests.get() 实际上是调用了内部的 request() 方法,并将 'get' 作为请求方法传入。让我们进一步深入 request() 方法。


🔸 第二部分:request方法揭秘

requests库中,request() 方法负责构建和发送所有类型的HTTP请求:

# requests/api.py
def request(method, url, **kwargs):session = sessions.Session()return session.request(method=method, url=url, **kwargs)

🔹 request() 方法创建了一个 Session 对象,然后调用了 session.request()。这意味着实际的请求处理是由 Session 对象完成的。


🔸 第三部分:Session对象的奥秘

Session 对象在requests库中扮演了重要角色。它不仅可以发送请求,还能保存cookie等会话信息:

# requests/sessions.py
class Session(SessionRedirectMixin, RequestHookMixin):def request(self, method, url, params=None, data=None, headers=None, cookies=None, files=None, auth=None, timeout=None, allow_redirects=True, proxies=None, hooks=None, stream=None, verify=True, cert=None, json=None):prep = self.prepare_request(Request(method=method, url=url, headers=headers, files=files, data=data, json=json, params=params, auth=auth, cookies=cookies, hooks=hooks))...send_kwargs = {'timeout': timeout, 'allow_redirects': allow_redirects, 'proxies': proxies, 'stream': stream, 'verify': verify, 'cert': cert, 'hooks': hooks}...resp = self.send(prep, **send_kwargs)return resp

🔹 Session 对象的 request() 方法中首先调用 prepare_request() 方法来构建 Request 对象。然后调用 send() 方法来发送请求。


🔸 第四部分:Request对象的构建

prepare_request() 方法负责构建一个 Request 对象:

# requests/sessions.py
def prepare_request(self, request):p = PreparedRequest()p.prepare(method=request.method.upper(),url=request.url,files=request.files,data=request.data,json=request.json,headers=request.headers,params=request.params,auth=request.auth,cookies=request.cookies,hooks=request.hooks,)return p

🔹 prepare_request() 方法中调用了 PreparedRequest 类,并通过其 prepare() 方法将请求的各个部分准备好。


🔸 第五部分:PreparedRequest的准备

PreparedRequest 类是用来标准化和准备请求数据的:

# requests/models.py
class PreparedRequest(RequestEncodingMixin, RequestHooksMixin):def prepare(self, method=None, url=None, headers=None, files=None, data=None, params=None, auth=None, cookies=None, hooks=None, json=None):self.prepare_method(method)self.prepare_url(url, params)self.prepare_headers(headers)self.prepare_body(data, files, json)self.prepare_auth(auth, url)self.prepare_cookies(cookies)self.prepare_hooks(hooks)

🔹 PreparedRequest 类的 prepare() 方法中,分别调用了一系列 prepare_* 方法来准备HTTP请求的各个部分,如方法、URL、头信息、请求体等。


🔸 第六部分:发送请求

当请求准备好后,Session 对象的 send() 方法负责实际发送HTTP请求:

# requests/sessions.py
def send(self, request, **kwargs):...r = adapter.send(request, **kwargs)...return r

🔹 send() 方法中最重要的一步是调用 adapter.send() 方法,这里的 adapterHTTPAdapter 对象,它负责底层的HTTP请求发送。


🔸 第七部分:HTTPAdapter的发送

HTTPAdapter 对象的 send() 方法通过底层库(如urllib3)来实际发送请求:

# requests/adapters.py
class HTTPAdapter(BaseAdapter):def send(self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None):conn = self.get_connection(request.url, proxies)...resp = conn.urlopen(method=request.method,url=request.url,body=request.body,headers=request.headers,...)return self.build_response(request, resp)

🔹 send() 方法通过 get_connection() 方法获取一个连接,然后使用 conn.urlopen() 发送请求,并调用 build_response() 方法构建响应对象。


🔸 第八部分:构建响应

build_response() 方法负责将底层响应对象转换为 requestsResponse 对象:

# requests/adapters.py
def build_response(self, request, resp):response = Response()response.status_code = resp.statusresponse.headers = CaseInsensitiveDict(resp.headers)response.raw = respresponse.url = request.urlresponse.request = requestresponse.connection = selfreturn response

🔹 build_response() 方法中,将底层响应对象的状态码、头信息、URL等信息赋值给 Response 对象,从而完成响应构建。


🔸 总结

🔹 通过以上解析,我们了解了 requests 库从发送请求到接收响应的全过程。从 requests.get() 方法开始,经过 Session 对象的处理、PreparedRequest 的准备、HTTPAdapter 的发送,最终构建 Response 对象。这一系列流程确保了 requests 库能够简洁、高效地处理HTTP请求,让开发者可以专注于业务逻辑的实现。

希望通过这次源码解析,大家对 requests 库有了更深入的理解,能够更好地运用它进行网络请求处理! 🚀

http://www.yayakq.cn/news/240410/

相关文章:

  • 放单网站搜索引擎优化的定义是什么
  • asp.net企业网站模板网站建设和维护
  • 建立网站免费wordpress数据库导入插件
  • iis做的网站如何添加播放器怎么在建设银行网站购买国债
  • 广西城乡住房建设厅网站kol推广
  • 建网站的流程及注意事项帮别人设计网站的网站吗
  • 郓城县城乡和建设局网站08网站建设
  • 网站优化建议怎么写宿州市埇桥建设规划局网站
  • 企业网站优化分为哪两个方向学编程的费用一般是多少
  • 张家港网站哪家做的好公司网站背景图片
  • 网站制作制作公司郑州团购网站建设
  • 门户网站制作百度文章收录查询
  • 贵阳学网站建设柯桥建设局网站
  • 网站开发图形化软件昆山网站建设怎么样
  • 做网页网站做网站为什么要买网站空间
  • phpcms网站音乐代码存放在什么位置自己做网站能赚钱吗2018
  • 芜湖网站制作网站建设光盘
  • 军博网站建设如何做单页网站
  • c2c模式的网站有哪些设计网站printerest
  • 建筑给排水代做网站谷歌浏览器网页版入口在哪里
  • wordpress主题显示不出来福州seo推广服务
  • 做传媒网站公司简介自适应wordpress模板
  • 企业网站的建设做电影网站如何买版权
  • 网站改了模板被百度降权网站制作公透明清晰
  • 广州微信网站开发建设的网站都是怎么赚钱
  • 莱芜公交网站360免费wifi为什么连接不上
  • 网站的服务器在哪里个人服务器搭建违法
  • 重庆建设安全管理网站如皋网站开发
  • 北京定制网站开发广西百度seo
  • 自己做的网站加载慢网页代码生成器在线