python利用urllib和urllib2访问http的GET/POST详解


Posted in Python onSeptember 27, 2017

前言

本文主要给大家介绍了关于python如何访问http的GET/POST的相关内容,使用urllib和urllib2,可以轻松实现对http的访问,下面话不多说了,来一起看看详细的介绍吧。

示例详解

以下给个例子,实现对http://127.0.0.1/cgi/test的GET与POST

使用的是平常意义上的query string

POST接受json

其中,

urllib2的Request方法如果只带一个参数是GET方法,但如果带两个参数,则为http的POST方法,第二个参数为POST的内容。

#!/usr/bin/env python
 
import urllib
import urllib2
import json
 
url_base = "http://127.0.0.1/cgi/test"
 
#GET
try:
 query = {'test':'yes','name':'colin'}
 query_string = urllib.urlencode(query)
 url = url_base+"?"+query_string
 print "GET", url<br data-filtered="filtered"> print "web output:"
 print urllib2.urlopen(urllib2.Request(url)).read()
except Exception as err:
 print err
 
#post
try:
 url = url_base
 print "POST", url
 a = {'k1':123, 'k2': '456', 'k3':'test'}
 json_s = json.dumps(a)<br data-filtered="filtered"> print "POST input:"
 print json_s<br data-filtered="filtered"> print "web output:"
 print urllib2.urlopen(urllib2.Request(url, json_s)).read()
except Exception as err:
 print err

test用bash编写,如下所示,其中jq是处理json的命令,需要下载一下,bash/sed/awk应该都是系统自带

#!/bin/bash
echo -e 'Content-type:text/plain\r'
echo -e '\r'
 
if [ X"$REQUEST_METHOD" = X"POST" ];then
  jq . | sed -nr '/:/!d; s/^([ \t]*"[^"]+"[ \t]*):/\1=/;s/,[ \t]*$//;s/"//g;p'
else
  echo ${QUERY_STRING} | awk 'BEGIN{RS="&"}1'
fi

随便用什么webserver都可以,只要支持CGI,我这里用是一个很轻量的webserver——boa,它可能不适合大型应用网站,但嵌入式里用CGI提供API还是很有用的,部署非常容易。

搭建之后,测试一下

$ ./test.py
GET http://127.0.0.1/v1/lic/test?test=yes&name=colin
web output:
test=yes
name=colin


POST http://127.0.0.1/v1/lic/test
POST input:
{"k3": "test", "k2": "456", "k1": 123}
web output:
 k3= test
 k2= 456
 k1= 123

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
pygame学习笔记(5):游戏精灵
Apr 15 Python
python写入并获取剪切板内容的实例
May 31 Python
python+influxdb+shell编写区域网络状况表
Jul 27 Python
python+splinter实现12306网站刷票并自动购票流程
Sep 25 Python
对python numpy.array插入一行或一列的方法详解
Jan 29 Python
python实现批量视频分帧、保存视频帧
May 31 Python
python opencv摄像头的简单应用
Jun 06 Python
python障碍式期权定价公式
Jul 19 Python
python从内存地址上加载python对象过程详解
Jan 08 Python
TensorFlow:将ckpt文件固化成pb文件教程
Feb 11 Python
解决windows下python3使用multiprocessing.Pool出现的问题
Apr 08 Python
利用Python实现Picgo图床工具
Nov 23 Python
python django使用haystack:全文检索的框架(实例讲解)
Sep 27 #Python
浅谈python和C语言混编的几种方式(推荐)
Sep 27 #Python
解决Python字典写入文件出行首行有空格的问题
Sep 27 #Python
Python基于分水岭算法解决走迷宫游戏示例
Sep 26 #Python
Python计算斗牛游戏概率算法实例分析
Sep 26 #Python
Python使用修饰器执行函数的参数检查功能示例
Sep 26 #Python
浅谈python for循环的巧妙运用(迭代、列表生成式)
Sep 26 #Python
You might like
分享一下贝贝成长进度的php代码
2012/09/14 PHP
PHP连接Nginx服务器并解析Nginx日志的方法
2015/08/16 PHP
PHP 文件上传后端处理实用技巧方法
2017/01/06 PHP
在Laravel中使用GuzzleHttp调用第三方服务的API接口代码
2019/10/15 PHP
php使用redis的几种常见操作方式和用法示例
2020/02/20 PHP
js 浏览器事件介绍
2012/03/30 Javascript
基于JQuery的一句话搞定手风琴菜单
2012/09/14 Javascript
带左右箭头图片轮播的JS代码
2013/12/18 Javascript
JS实现倒计时和文字滚动的效果实例
2014/10/29 Javascript
10个很棒的jQuery代码片段
2015/09/24 Javascript
jQuery进行组件开发完整实例
2015/12/15 Javascript
JavaScript代码实现左右上下自动晃动自动移动
2016/04/08 Javascript
AngularJS  $modal弹出框实例代码
2016/08/24 Javascript
AngularJS实践之使用ng-repeat中$index的注意点
2016/12/22 Javascript
JS实现去除数组中重复json的方法示例
2017/12/21 Javascript
js实现动态增加文件域表单功能
2018/10/22 Javascript
vue使用keep-alive保持滚动条位置的实现方法
2019/04/09 Javascript
Vue入门学习笔记【基本概念、对象、过滤器、指令等】
2019/04/13 Javascript
vue项目中引入vue-datepicker插件的详解
2019/05/14 Javascript
为react组件库添加typescript类型提示的方法
2020/06/15 Javascript
[49:42]DOTA2上海特级锦标赛主赛事日 - 3 胜者组第二轮#2Secret VS EG第一局
2016/03/04 DOTA
[03:41]2018完美盛典-《Fight With Us》
2018/12/16 DOTA
跟老齐学Python之不要红头文件(2)
2014/09/28 Python
Python定时执行之Timer用法示例
2015/05/27 Python
itchat和matplotlib的结合使用爬取微信信息的实例
2017/08/25 Python
Python设计模式之组合模式原理与用法实例分析
2019/01/11 Python
python字符串切割:str.split()与re.split()的对比分析
2019/07/16 Python
Python3多线程版TCP端口扫描器
2019/08/31 Python
使用Keras实现简单线性回归模型操作
2020/06/12 Python
python如何操作mysql
2020/08/17 Python
浅析图片上传及canvas压缩的流程
2020/06/10 HTML / CSS
Revolution Beauty美国官网:英国知名化妆品网站
2018/07/23 全球购物
Wilson体育用品官网:美国著名运动器材品牌
2019/05/12 全球购物
雏鹰争章活动总结
2014/05/09 职场文书
团员个人年度总结
2015/02/26 职场文书
mysql聚集索引、辅助索引、覆盖索引、联合索引的使用
2022/02/12 MySQL