对于如何用Python处理POST和GET变量?感兴趣的读者,本文将会是一篇不错的选择,我们将详细介绍pythonpostget,并为您提供关于HTTPPOST和GET与cookie一起在python
对于如何用Python处理POST和GET变量?感兴趣的读者,本文将会是一篇不错的选择,我们将详细介绍python post get,并为您提供关于HTTP POST和GET与cookie一起在python中进行身份验证、perl 使用post和get、php – 使用Symfony清理POST和GET变量、PHP-$_POST和$_GET变量安全性,无需数据库的有用信息。
本文目录一览:- 如何用Python处理POST和GET变量?(python post get)
- HTTP POST和GET与cookie一起在python中进行身份验证
- perl 使用post和get
- php – 使用Symfony清理POST和GET变量
- PHP-$_POST和$_GET变量安全性,无需数据库
如何用Python处理POST和GET变量?(python post get)
在PHP中,你只能将其$_POST
用于POST
和$_GETGET
(查询字符串)变量。Python中的等效功能是什么?
答案1
小编典典假设你正在发布带有以下内容的html表单:
<input type="text" name="username">
如果使用原始cgi
:
import cgiform = cgi.FieldStorage()print form["username"]
如果使用Django,Pylons,Flask
或Pyramid
:
print request.GET[''username''] # for GET form methodprint request.POST[''username''] # for POST form method
使用Turbogears,Cherrypy
:
from cherrypy import requestprint request.params[''username'']
Web.py
:
form = web.input()print form.username
Werkzeug
:
print request.form[''username'']
如果使用Cherrypy
或Turbogears
,还可以直接使用参数定义处理程序函数:
def index(self, username): print username
Google App Engine:
class SomeHandler(webapp2.RequestHandler): def post(self): name = self.request.get(''username'') # this will get the value from the field named username self.response.write(name) # this will write on the document
因此,你实际上必须选择这些框架之一。
HTTP POST和GET与cookie一起在python中进行身份验证
- 我正在尝试创建一个使用我的ID和密码登录到我的大学站点的python程序。这是登录的正式页面:https
- //webapp.pucrs.br/consulta/
您可能会注意到,这两个字段分别命名为pr1和pr2。该页面使用POST发送数据。另外,加载页面时会下载一个cookie,它是一个JSESSIONID,其中包含一个随机值,据我所知,您必须返回POST方法的标头才能验证登录名。
我编写了以下代码,但是GET方法的返回页上显示“会话未初始化”,可能导致cookie没有正确发送回。
from urllib2 import Request, build_opener, HTTPCookieProcessor, HTTPHandlerimport httplib, urllib, cookielib, Cookie, osconn = httplib.HTTPConnection(''webapp.pucrs.br'')#COOKIE FINDERcj = cookielib.CookieJar()opener = build_opener(HTTPCookieProcessor(cj),HTTPHandler())req = Request(''http://webapp.pucrs.br/consulta/principal.jsp'')f = opener.open(req)html = f.read()for cookie in cj: c = cookie#FIM COOKIE FINDERparams = urllib.urlencode ({''pr1'':111049631, ''pr2'':<pass>})headers = {"Content-type":"text/html", "Set-Cookie" : "JSESSIONID=70E78D6970373C07A81302C7CF800349"} # I couldn''t set the value automaticaly here, the cookie object can''t be converted to string, so I change this value on every session to the new cookie''s value. Any solutions?conn.request ("POST", "/consulta/servlet/consulta.aluno.ValidaAluno",params, headers) # Validation pageresp = conn.getresponse()temp = conn.request("GET","/consulta/servlet/consulta.aluno.Publicacoes") # desired content pageresp = conn.getresponse()print resp.read()
我在哪里放置此cookie,以便对登录进行身份验证?
答案1
小编典典我会尝试使用该requests
库。该文档非常出色,并且最终代码比urllib*
$ pip install requests
使用一个自行处理cookie的会话(请参阅Piotr的评论),结果看起来像这样
import requestsurl_0 = "http://webapp.pucrs.br/consulta/principal.jsp"url = "https://webapp.pucrs.br/consulta/servlet/consulta.aluno.ValidaAluno"data = {"pr1": "123456789", "pr2": "1234"}s = requests.session()s.get(url_0)r = s.post(url, data)
似乎工作正常,因为我收到了pr1
123456789的“ Usuario inexistente”通知和带有您的用户编号的“
Sehnainválida”。
perl 使用post和get
url 传参格式: perl get 方式请求: use Encode; use Encode::CN; use JSON; use URI::Escape; use LWP::Simple; #$host = "http://ip.taobao.com/service/getIpInfo.PHP?ip=202.101.172.35"; $host = " http://211.149.197.95:8888/sms.aspx?action=send&userid=74&account=xx&password=xx&mobile=18072xx7&content=内容&sendTime=&extno="; $content = get($host); print "\$content is $content\n"; 通过get方式请求,参数所以用“&”符号来隔开。 perl post 方式请求: use strict; use LWP; my $browser = LWP::UserAgent->new(); my $response= $browser->post("http://211.149.197.95:8888/sms.aspx",[ "action" => "send","userid" => "74","account" => "xx","password" => xx,"mobile" =>180xx237,"content" =>"test0612"]); #多加了 一个被发送的数据的数组 print $response->content; # 输出获得的网页内容
php – 使用Symfony清理POST和GET变量
我正在使用Silex,它正在使用来自Symfony的组件Request.
当我从表单中获取数据时,例如这样:
$params = $request->request->all();
没有东西被清理干净.与Laravel不同,用户输入数据会自动清理.我应该手动完成,使用像strip_tag这样的内置PHP函数,或者有一种symfony方法.
解决方法:
因此,基本上在清理输入时,它不应该是请求的一部分.这是因为,清理后的输入实际上只是数据库安全性的一部分.
因此,当Doctrine传递给Doctrine时,它会对输入进行清理.基本上,Doctrine会自动确保所有输入都已清理.从广义上讲,数据库抽象层负责确保传递给它的数据有效.
Propel也是如此.
所以我所说的是输入清理不是Request对象的责任,因此它不提供这样做的功能.这符合单一责任原则,您可以在此处阅读更多信息:http://en.wikipedia.org/wiki/Single_responsibility_principle
如果要验证通过请求接收的数据,可以使用Validator Component执行此操作,还有一个Silex ServiceProvider:
https://github.com/symfony/Validator
TLDR;
清理输入不是请求的响应性,它是您的DBAL(数据库滥用层)的责任.
PHP-$_POST和$_GET变量安全性,无需数据库
如果您未在应用程序中使用数据库,但是在代码中执行了“ echo”操作或使用了$_POST或$_GET变量,是否需要对它们进行转义?
喜欢:
if(isset($_GET['test']){
echo $_GET['test'];
}
要么
function math(){
if(isset($_GET['number'],$_GET['numberr']){
return $_GET['number']*$_GET['numberr'];
}
return null;
}
解决方法:
即使您使用数据库,也需要在打印之前对其进行转义或清理.有人可能会偷偷摸摸地使用< b>会使您的整个页面变为粗体,或< script> alert(‘hello’);< / script>将运行Javascript.
echo htmlspecialchars($_GET['test']);
这将替换您所有的<与& lt;和>与& gt;因此HTML会被视为文本而非HTML,并且不会弄乱您的页面.
关于如何用Python处理POST和GET变量?和python post get的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于HTTP POST和GET与cookie一起在python中进行身份验证、perl 使用post和get、php – 使用Symfony清理POST和GET变量、PHP-$_POST和$_GET变量安全性,无需数据库等相关内容,可以在本站寻找。
本文标签: