各位老铁们,大家好,今天由我来为大家分享python服务器,以及一行Python代码让你的电脑变成HTTP服务器与同事分享文件的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧!
一、python通过get,post方式发送请求和接收响应
本文实例讲述了python通过get,post方式发送请求和接收响应的方法。分享给大家供大家参考。
具体如下:
测试用CGI,名字为test.py,放在apache的cgi-bin目录下:
#!/usr/bin/python
import cgi
def main():
print Content-type: text/htmln
form= cgi.FieldStorage()
if form.has_key(ServiceCode) and form[ServiceCode].value!=:
print h1 Hello,form[ServiceCode].value,/h1
else:
print h1 Error! Please enter first name./h1
main()
python发送post和get请求
get请求:
使用get方式时,请求数据放在url中。
方法一、
?
7
8
import urllib
import urllib2
url=
req= urllib2.Request(url)
print req
res_data= urllib2.urlopen(req)
res= res_data.read()
print res
方法二、
?
7
import lib
url=
conn= lib.HTTPConnection(192.168.81.16)
conn.request(method=GET,url=url)
response= conn.getresponse()
res= response.read()
print res
post请求:
使用post方式时,数据放在data或者body中,不能放在url中,放在url中将被忽略。
方法一、
import urllib
import urllib2
test_data={ServiceCode:aaaa,b:bbbbb}
test_data_urlencode= urllib.urlencode(test_data)
requrl=
req= urllib2.Request(url= requrl,data=test_data_urlencode)
print req
res_data= urllib2.urlopen(req)
res= res_data.read()
print res
方法二、
11
import urllib
import lib
test_data={ServiceCode:aaaa,b:bbbbb}
test_data_urlencode= urllib.urlencode(test_data)
requrl=
headerdata={Host:192.168.81.16}
conn= lib.HTTPConnection(192.168.81.16)
conn.request(method=POST,url=requrl,body=test_data_urlencode,headers= headerdata)
response= conn.getresponse()
res= response.read()
print res
对python中json的使用不清楚,所以临时使用了urllib.urlencode(test_data)方法;
模块urllib,urllib2,lib的区别
lib实现了和s的客户端协议,但是在python中,模块urllib和urllib2对lib进行了更上层的封装。
介绍下例子中用到的函数:
1、HTTPConnection函数
lib.HTTPConnection(host[,port[,stict[,timeout]]])
这个是构造函数,表示一次与服务器之间的交互,即请求/响应
host标识服务器主机(服务器IP或域名)
port默认值是80
strict模式是False,表示无法解析服务器返回的状态行时,是否抛出BadStatusLine异常
例如:
conn= lib.HTTPConnection(192.168.81.16,80)与服务器建立。
2、HTTPConnection.request(method,url[,body[,header]])函数
这个是向服务器发送请求
method请求的方式,一般是post或者get,
例如:
method=POST或method=Get
url请求的资源,请求的资源(页面或者CGI,我们这里是CGI)
例如:
url=
或者
url=
body需要提交到服务器的数据,可以用json,也可以用上面的格式,json需要调用json模块
headers请求的头headerdata={Host:192.168.81.16}
例如:
?
test_data={ServiceCode:aaaa,b:bbbbb}
test_data_urlencode= urllib.urlencode(test_data)
requrl=
headerdata={Host:192.168.81.16}
conn= lib.HTTPConnection(192.168.81.16,80)
conn.request(method=POST,url=requrl,body=test_data_urlencode,headers= headerdata)
conn在使用完毕后,应该关闭,conn.close()
3、HTTPConnection.getresponse()函数
这个是获取响应,返回的对象是HTTPResponse的实例。
4、HTTPResponse介绍:
HTTPResponse的属*如下:
read([amt])获取响应消息体,amt表示从响应流中读取指定字节的数据,没有指定时,将全部数据读出;
getheader(name[,default])获得响应的header,name是表示头域名,在没有头域名的时候,default用来指定返回值
getheaders()以列表的形式获得header
例如:
?
1
2
3
4
5
date=response.getheader(date);
print date
resheader=
resheader=response.getheaders();
print resheader
列形式的响应头部信息:
?
1
2
3
[(content-length, 295),(aept-ranges, bytes),(server, Apache),(last-modified, Sat, 31 Mar 2012 10:07:02 GMT),(connection, close),(etag, e8744-127-4bc871e4fdd80),(date, Mon, 03 Sep 2012 10:01:47 GMT),(content-type, text/html)]
date=response.getheader(date);
print date
取出响应头部的date的值。
希望本文所述对大家的Python程序设计有所帮助。
二、一行Python代码让你的电脑变成HTTP服务器与同事分享文件
搭建一个简单的HTTP服务器,让同事或上传文件,只需一行Python代码。通过Python,你可以快速在局域网内提供服务,提高传输效率。只需在命令行输入以下代码:
Python3命令:python-m .server 8000
或Python2命令:python-m SimpleHTTPServer 8000
指定端口号(8000)以避免冲突,这将显示当前目录下的文件和目录。默认端口为8000。通过浏览器输入“服务器IP:8000”访问服务器,显示当前工作目录下的文件。
然而,命令运行时无法后台执行,按Ctrl+ C会关闭端口。在Linux环境下使用ifconfig查看本机IP,然后在浏览器栏输入IP+端口号进行访问。手机或其他设备也可以访问并文件。
若需上传文件,运行特定的Python脚本,手机或其他设备即可通过浏览器上传文件至服务器。在服务器端,上传成功后会显示相应信息。此服务器支持文件,以及打开HTML、PDF等文件。若文件夹中包含index.html,将打开网页。反之,可文件。
简而言之,利用Python搭建的HTTP服务器,不仅能为同事提供高效、便捷的文件服务,还支持文件上传。实现这一功能只需简单的Python命令,大大提高团队协作效率。希望此教程对您有所帮助,欢迎分享给更多需要的朋友。
三、Python实现自定义HTTP代理服务器
构建自定义的HTTP代理服务器在Python中是可行的,通过利用内置的socket和.server模块,或者采用更高级的第三方库如mitmproxy或Twisted。此类代理服务器在客户端与目标服务器间转发HTTP请求和响应,同时提供自定义操作如日志记录、请求修改或响应拦截等。
简述一个使用Python标准库socket模块构建基础HTTP代理服务器的示例代码。请注意,此代码是基础与简化版本,仅用作演示基础HTTP代理服务器搭建。实际应用中,必须处理复杂请求和响应,包括POST请求、HTTPS请求、解析请求头、处理响应头、管理持久连接等。
对于更复杂的需求,建议采用成熟的第三方库,例如mitmproxy。它提供丰富的功能和强大的扩展*,便于构建自定义的HTTP代理服务器。