刚开始准备写博客,在以后的日子里,也会陆续写一些研究过程中或者项目中可能遇到的一些小的demo,以备以后能够更快的调用。
在本次中主要是实现对于python与android之间通过http等的方式交互
在本次的分析中,相对于原来的原生socket的实现,在这里使用了封装更加方便地wsgiref模块,具体模块地API开发文档可见[wsgirefAPI开发文档],在这里只是介绍自己用到地一些功能。
import wsgiref
from wsgiref.simple_server import make_server
from wsgiref.util import setup_testing_defaults
from urllib import parse
def application(environ, start_response):
# environ是当前请求的所有数据,包括Header和URL,body
#实现文档地报头
start_response('200 OK', [('Content-Type', '#text/html')])
return [**] #需要返回数据,以byte地形式
if __name__ == "__main__":
port = 6088 #端口号
httpd = make_server("0.0.0.0", port, application)
print( "serving http on port {0}...".format(str(port)))
httpd.serve_forever()
以上主要实现了实现了基本地请求过程。
其中Content-Type,可以根据自己地需求改变 Content-Type对应表
相应地如果需要获取解析POST中地报文信息,可以在application中添加如下代码
#以下获取报文地长度
try:
request_body_size = int(environ.get('CONTENT_LENGTH'))
except (ValueError):
request_body_size = 0
#request_body 为获取到的信息。
request_body = environ['wsgi.input'].read(request_body_size)
print(request_body)
#当然也可以通过如下地方式获取url
url = wsgiref.util.request_uri(environ, include_query=1)
因为在使用地过程中需要针对照片传输。所以添加了部分对于照片地操作。
#通过如下方式实现对于照片读取
with open(path,'rb') as f:
image=f.read()
f.close()
#因为读取地是二进制地数据,一次可以直接通过return [image,]地方式传回html
#对于收到地图片通过 wb 地方式进行数据写
with open('test.png','wb') as f:
f.write(request_body)
f.close()
特别的在写的过程中要注意路径地存储,可以通过OS获取到绝对路径,进行替换
import os
BASE_OIR=os.path.abspath(__file__)
主要可以通过如下两种方式
1 更加详细地参数表达
String url ="http://www.xxxx.com:端口号/xxx";
// 创建连接
HttpClient httpClient = new DefaultHttpClient();
HttpPost post = new HttpPost(url);
// 设置参数,仿html表单提交
List paramList = new ArrayList();
BasicNameValuePair param1 = new BasicNameValuePair("name",
"xxx");
BasicNameValuePair param2 = new BasicNameValuePair("pass",
"xxx");
paramList.add(param1);paramList.add(param2);
post.setEntity(new UrlEncodedFormEntity(paramList, HTTP.UTF_8));
// 发送HttpPost请求,并返回HttpResponse对象
HttpResponse httpResponse = httpClient.execute(post);
// 判断请求响应状态码,状态码为200表示服务端成功响应了客户端的请求
if (httpResponse.getStatusLine().getStatusCode() == 200) {
// 获取返回结果
String result = EntityUtils.toString(httpResponse
.getEntity());
System.out.println(result);
Log.i("sm", result);
2 使用httpURLConnection地形式
//1,找水源--创建URL
URL url = new URL("https://www.baidu.com/");//放网站
//2,开水闸--openConnection
HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
//3,建管道--InputStream
InputStream inputStream = httpURLConnection.getInputStream();
//4,建蓄水池蓄水-InputStreamReader
InputStreamReader reader = new InputStreamReader(inputStream, "UTF-8");
//5,水桶盛水--BufferedReader
BufferedReader bufferedReader = new BufferedReader(reader);
StringBuffer buffer = new StringBuffer();
String temp = null;
while ((temp = bufferedReader.readLine()) != null) {
//取水--如果不为空就一直取
buffer.append(temp);
}
bufferedReader.close();//记得关闭
reader.close();
inputStream.close();
Log.e("MAIN",buffer.toString());//打印结果
--