网页中flash数据抓取(讲参数会被打包在数据报中传输(组图) )
优采云 发布时间: 2021-11-14 06:15网页中flash数据抓取(讲参数会被打包在数据报中传输(组图)
)
get方法:data参数通过URL字符串本身传递,可以直接从服务端的变量\'QUERY_STRING\'中读取,效率更高,但缺乏安全性,不能处理复杂的数据(只有字符String例如,在servlet/jsp中,就不能处理java的vector等功能)。post方式:在传输方式上,将参数打包在数据报中进行传输,从环境变量CONTENT_LENGTH中读取,方便传输较大的数据。同时,由于浏览器地址栏中的数据没有暴露,安全性相对较高,但这样的处理效率会受到影响。
get 和 post 方法总结
get方法:data参数通过URL字符串本身传递,可以直接从服务端的变量\'QUERY_STRING\'中读取,效率更高,但缺乏安全性,不能处理复杂的数据(只有字符String ,比如在servlet/jsp中,就不能处理java的功能,比如vector)。
post方式:在传输方式上,将参数打包在数据报中进行传输,从环境变量CONTENT_LENGTH中读取,方便传输较大的数据。同时,由于浏览器地址栏中的数据没有暴露,安全性相对较高,但这样的处理效率会受到影响。
get请求是指客户端请求一个uri,服务器返回客户端请求的uri。post请求意味着客户端在请求时需要提交数据。这就像提交表格一样。要提交的数据将放在请求消息的正文部分。服务器收到这样的请求后,通常需要对数据进行处理。
在 Form 中,您可以使用 post 或 get。它们都是方法的合法值。但是,post 和 get 方法的使用至少有两个区别:
1、Get 方法通过 URL 请求传递用户的输入。Post 方法采用另一种形式。
2、Get方法提交时需要使用Request.QueryString获取变量的值,Post方法提交时必须通过Request.Form访问提交的内容。
仔细研究下面的代码。你可以运行它来感受一下:
通过get方法传递来的字符串是: ""
通过Post方法传递来的字符串是: ""
将上面的代码保存为getpost.asp,然后运行。首先,测试post方法。此时浏览器的url没有变化,返回结果为:
通过 Post 方法传递的字符串是:“Hello World”
然后用get方法提交测试,注意浏览器的url变成了:
+世界
返回的结果是:
通过get方法传递的字符串是:“Hello World”
最后通过post方法提交后,浏览器的url还是:
+世界
返回的结果变为:
通过get方法传递的字符串是:“Hello World”
通过 Post 方法传递的字符串是:“Hello World”
提示:通过 get 方法提交数据可能会导致安全问题。例如,登陆页面。通过get方法提交数据时,URL上会出现用户名和密码。如果:
1、登录页面可以被浏览器缓存;2、 其他人可以访问客户的机器。
然后,其他人可以从浏览器历史记录中读取该客户的帐户和密码。因此,在某些情况下,get 方法会导致严重的安全问题。建议使用Form中的post方法。
Python下载网页的几种方法
通过get方法:
fd = urllib2.urlopen(url_link)
data = fd.read()
使用get方法时,url类似如下格式:
index.jsp?id=100&op=bind
GET 标头如下:
GET /sn/index.php?sn=123&n=asa HTTP/1.1
Accept: */*
Accept-Language: zh-cn
host: localhost
Content-Type: application/x-www-form-urlencoded
Content-Length: 12
Connection:close
get方法还可以通过以下方式实现:
def GetHtmlSource_Get(htmurl):
htmSource = ""
try:
urlx = httplib.urlsplit(htmurl)
conn = httplib.HTTPConnection(urlx.netloc)
conn.connect() #建立连接
conn.putrequest("GET", htmurl, None) #请求类型
conn.putheader("Content-Length", 0)
conn.putheader("Connection", "close")
conn.endheaders()
res = conn.getresponse()
htmSource = res.read()
except Exception(), err:
trackback.print_exec()
conn.close()
return htmSource
使用post方法时,POST方法将请求参数封装在HTTP请求数据中,以name/value的形式出现,可以传输大量数据,也可以用来传输文件。POST 消息的头部如下:
POST /sn/index.php HTTP/1.1
Accept: */*
Accept-Language: zh-cn
host: localhost
Content-Type: application/x-www-form-urlencoded
Content-Length: 12
Connection:closes
n=123&n=asa
不管是post还是get,他们传递的数据都必须是url编码的。每对名称/值由一个和号分隔;表单中的每对名称/值都用 = 分隔;如果用户没有为名称输入值,名称仍会出现,但没有值。; 任何特殊字符(即那些不是简单的七位 ASCII 码的字符,例如中文字符)都会以带有百分号 % 的十六进制编码。urllib 库提供了一个函数来实现 URL 编码:
search=urllib.urlencode({\'q\':\'python\'})
#\'q=python\'
通过邮寄发送请求:
import httplib,urllib;
#定义需要进行发送的数据
params = urllib.urlencode({\'cat_id\':\'6\',
\'news_title\':\'标题-Test39875\',
\'news_author\':\'Mobedu\',
\'news_ahome\':\'来源\',
\'tjuser\':\'carchanging\',
\'news_keyword\':\'|\',
\'news_content\':\'测试-Content\',
\'action\':\'newnew\',
\'MM_insert\':\'true\'});
#定义一些文件头
headers = {"Content-Type":"application/x-www-form-urlencoded",
"Connection":"Keep-Alive",
"Referer":"http://192.168.1.212/newsadd.asp?action=newnew"};
#与网站构建一个连接
conn = httplib.HTTPConnection("192.168.1.212");
#开始进行数据提交 同时也可以使用get进行
conn.request(method="POST",url="/newsadd.asp?action=newnew",body=params,headers=headers);
#返回处理后的数据
response = conn.getresponse();
#判断是否提交成功
if response.status == 302:
print "发布成功!";
else:
print "发布失败";
#关闭连接
conn.close();
它也可以类似于 get 方法来实现:
def GetHtmlSource_Post(getString):
htmSource = ""
try:
url = httplib.urlsplit("http://app.sipo.gov.cn:8080")
conn = httplib.HTTPConnection(url.netloc)
conn.connect()
conn.putrequest("POST", "/sipo/zljs/hyjs-jieguo.jsp") #post方法
conn.putheader("Content-Length", len(getString))
conn.putheader("Content-Type", "application/x-www-form-urlencoded")
conn.putheader("Connection", " Keep-Alive")
conn.endheaders()
conn.send(getString) #Http包的body
f = conn.getresponse()
if not f:
raise socket.error, "timed out"
htmSource = f.read()
f.close()
conn.close()
except Exception(), err:
trackback.print_exec()
conn.close()
return htmSource