python編寫程序,wsgiserver python 漏洞_python-簡單測試wsgi

 2023-12-06 阅读 27 评论 0

摘要:1.1 RESTful 架構REST全稱是Representational State Transfer,中文意思是表述(編者注:通常譯為表征)性狀態轉移。 它首次出現在2000年Roy Fielding的博士論文中,Roy Fielding是HTTP規范的主要編寫者之一。 他在論文中提到:"我這篇文章的寫作目

1.1 RESTful 架構

REST全稱是Representational State Transfer,中文意思是表述(編者注:通常譯為表征)性狀態轉移。 它首次出現在2000年Roy Fielding的博士論文中,Roy Fielding是HTTP規范的主要編寫者之一。 他在論文中提到:"我這篇文章的寫作目的,就是想在符合架構原理的前提下,理解和評估以網絡為基礎的應用軟件的架構設計,得到一個功能強、性能好、適宜通信的架構。REST指的是一組架構約束條件和原則。" 如果一個架構符合REST的約束條件和原則,我們就稱它為RESTful架構。

REST本身并沒有創造新的技術、組件或服務,而隱藏在RESTful背后的理念就是使用Web的現有特征和能力, 更好地使用現有Web標準中的一些準則和約束。雖然REST本身受Web技術的影響很深, 但是理論上REST架構風格并不是綁定在HTTP上,只不過目前HTTP是唯一與REST相關的實例。 所以我們這里描述的REST也是通過HTTP實現的REST。

RESTful架構的一個核心概念是資源。從RESTful的角度來看,網絡里的任何東西都是資源,它可以是一段文本、一張圖片等,每個資源對應一個特定的URL(統一資源定位符)并用它進行標示,訪問這個URL就可以獲得這個資源。

python編寫程序、在互聯網中,客戶端和服務端之間進行互動傳遞的就是這種資源的表述,上網的過程就是調用資源的URL,獲取它不同表現形式的過程。這個互動只使用無狀態協議HTTP,也就是說,服務端必須保存所有的狀態,客戶端可以使用HTTP 的幾個基本操作,包括GET(獲取)、POST(創建)、PUT(更新)、DELETE(刪除),使服務端上的資源發生狀態轉化,也就是所謂的“表屬性狀態轉移”

1.2 WSGI簡介

web應用的本質:

1)瀏覽器發送一個HTTP請求

2)服務器收到請求,生成一個HTML文檔

python爬蟲403解決方案,3)服務器把HTML文檔作為HTTP響應的Body發送給瀏覽器

4)瀏覽器收到HTTP響應,從HTTP Body取出HTML文檔并顯示

所以,最簡單的web應用就是先把HTML用文件保存好,用一個現成的HTTP服務器軟件接收用戶請求,從文件中讀取HTML,并返回。Apache、Nginx等一些常見的靜態服務器就是處理這些事情的。

如果要要動態生成HTML,就需要自己來實現上述步驟。不過,接受HTTP請求、解析HTTP、發送HTTP響應都是苦力活,如果是我們自己來寫這些底層代碼,需要耗費大量的時間和精力。正確的做法是底層代碼有專門的服務器軟件來實現,可以使用Python專注于生成HTML文檔。因為我們不希望接觸到TCP連接、HTTP原始請求和響應格式,所以需要一個統一的接口,可以專心的使用python編寫web業務。這個接口就是WSGI(Web Server Gateway Interface)。Django、CherryPy都自帶WSGI Server,主要用于測試。

WSGI有兩方,服務器方和應用程序

python爬取網頁有亂碼怎么解決?1)服務器方:其調用應用程序,給應用程序提供環境信息和回調函數,這個回調函數用來將應用程序設置的HTTP Header和Status等信息傳遞給服務器方。

2)應用程序:用來生成返回的Header,Body和Status,以便返回服務器方

1.2 簡單的WSGI

WSGI接口定義非常簡單,它只要求WEB實現一個函數,就可以相應HTTP請求.def?application(environ,start_response):

start_response('200?OK',[('Content-Type','text/html')])

python web開發、return?'

Hello,web1

'

上面的application ()函數是一個符合WSGI標準的HTTP處理函數,它接收兩個參數:

1)environ:一個包含所有HTTP請求信息的dict對象

2)start_response:一個發送HTTP相應的函數

在application()函數中調用:start_response('200?OK',[('Content-Type','text/html')])

pycharm爬取網頁數據。就發送了HTTP響應的Header。注意,Header只能發送一次,即只能調用一次start_response()函數。start_response()函數接收兩個參數,一個是HTTP響應碼,另一個是一組list表示的HTTP Header,每個Header用

一個包含兩個str的tuple表示。

通常情況下,應該把Conten-Type頭發送給瀏覽器,其他很多常用的HTTP Header也應該發送。然后,函數的返回值'

web1

將作為HTTP響應的Body發送給瀏覽器。

有了WSGI,接下來就是如何從environ這個dict對象拿到HTTP請求信息,然后構造HTML,通過start_response()發送Header,最后返回Body。整個application()函數本身沒有涉及任何解析HTTP的部分,也就是說底層代碼不需要我們自己編寫,只負責再更高層次上考慮如何響應請求。application()函數必須由WSGI服務器來調用。

Python內置了一個WSGI服務器,這個模塊叫做wsgiref,它是用純python編寫的WSGI服務器的參考實現,所謂參考實現,是指該實現完全符合WSGI標準,但是不考慮任何運行效率,僅供測試

python攻擊網站。1.3 運行WSGI服務

編寫一個python腳本 hello.py,實現Web應用程序的WSGI處理函數#!/usr/bin/python

#coding=utf-8

def?application(environ,start_response):

start_response('200?OK',[('Content-Type','text/html')])

pycharm提示沒有編譯器怎么解決?return?'

Hello,web1

'

然后編寫server.py,負責啟動WSGI服務器,加載appliction()函數:#!/usr/bin/python

#coding=utf-8

from?wsgiref.simple_server?import?make_server?????#從wsgiref模塊導入

from?hello?import?application?????????????????????#導入自己編寫的application函數

python編寫木馬病毒。httpd?=?make_server('',8000,application)??????????#創建一個服務器,ip地址為空,端口是8000,處理函數是application:

print?"Serving?HTTP?on?port?8000..."

httpd.serve_forever()????????????????????????????#開始監聽HTTP請求

確保兩個文件在同一個目錄,然后開始啟動

啟動成功后,打開瀏覽器輸入http://localhost:8000/就可以看到結果了

python反爬蟲、同時終端可以看到顯示輸出

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/1/187995.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息