如何用python requests post json一段字符串

君,已阅读到文档的结尾了呢~~
python requests快速入门快速,快速入门
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
python requests快速入门
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口你的位置: >
> python用httplib模块发送get和post请求
在python中,模拟http客户端发送get和post请求,主要用httplib模块的功能。
1、python发送GET请求
我在本地建立一个测试环境,test.php的内容就是输出一句话:
echo 'Old friends and old wines are best.';
python发送get请求代码:
#!/usr/bin/env python
#coding=utf8
import httplib
httpClient = None
httpClient = httplib.HTTPConnection('localhost', 80, timeout=30)
httpClient.request('GET', '/test.php')
#response是HTTPResponse对象
response = httpClient.getresponse()
print response.status
print response.reason
print response.read()
except Exception, e:
if httpClient:
httpClient.close()
上面代码中使用了finally来保证即使出错的时候也能关闭httpClient。运行这个程序,在我的电脑上输出结果如下:
python用httplib发送get请求
2、python发送POST请求
修改test.php内容,打印出$_POST数组:
var_dump($_POST);
python发起post请求代码:
#!/usr/bin/env python
#coding=utf8
import httplib, urllib
httpClient = None
params = urllib.urlencode({'name': 'tom', 'age': 22})
headers = {&Content-type&: &application/x-www-form-urlencoded&
, &Accept&: &text/plain&}
httpClient = httplib.HTTPConnection(&localhost&, 80, timeout=30)
httpClient.request(&POST&, &/test.php&, params, headers)
response = httpClient.getresponse()
print response.status
print response.reason
print response.read()
print response.getheaders() #获取头信息
except Exception, e:
if httpClient:
httpClient.close()
运行代码,在我的电脑上输出如下:
python用httplib发送post请求
友情提示:
在http操作中,有时会需要了解一些http协议的相关内容,可以前往w3c查看:http://www.w3.org/Protocols/rfc2616/rfc2616.html
转载请注明: &
与本文相关的文章python requests快速入门_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
python requests快速入门
上传于||文档简介
&&p​y​t​h​o​n​ ​r​e​q​u​e​s​t​s​模​块​的​使​用​介​绍​和​功​能​概​要
阅读已结束,如果下载本文需要使用0下载券
想免费下载更多文档?
下载文档到电脑,查找使用更方便
还剩28页未读,继续阅读
你可能喜欢& & & & 如果你还在为python的各种urllib和urlibs,cookielib 头疼,或者还还在为python模拟登录和抓取数据而抓狂,那么来看看我们推荐的requests,python采集数据模拟登录必备利器!& & 这也是python推荐的HTTP客户端库:& & 本文就以一个模拟登录的例子来加以说明,至于采集大家就请自行发挥吧。& & 代码很简单,主要是展现python的requests库的简单至极,代码如下:& & s = requests.session()data = {'user':'用户名','passdw':'密码'}#post 换成登录的地址,res=s.post('http://www.xxx.net/index.php?action=login',data);#换成抓取的地址s.get('http://www.xxx.net/archives/155/');& & 看!仅仅4行代码,即可模拟登录。& & 您可能感兴趣的文章:python模拟登录百度代码分享(获取百度贴吧等级)python模拟登录百度贴吧(百度贴吧登录)实例Python(Tornado)模拟登录小米抢手机python抓取某汽车网数据解析html存入excel示例PHP的cURL库功能简介 抓取网页、POST数据及其他c# 抓取Web网页数据分析浅析python 中__name__ = ''__main__'' 的作用python之import机制详解采用python实现简单QQ单用户机器人的方法python实现定制交互式命令行的方法& & QQ空间
百度搜藏更多& & Tags:python requests库 模拟登录 抓取 数据& & 复制链接收藏本文打印本文关闭本文返回首页& & 上一篇:浅析python 中__name__ = ''__main__'' 的作用& & 下一篇:下面没有链接了& & 相关文章python连接池实现示例程序python数据库操作常用功能使用详解(创建表/插入数据/获取数据)python正则匹配抓取豆瓣电影链接和评论代码分享下载糗事百科的内容_python版在python中的socket模块使用代理实例使用python删除nginx缓存文件示例(python文件操作)python实现系统状态监测和故障转移实例方法python在windows下实现备份程序实例解决python写的windows服务不能启动的问题Python FTP操作类代码分享& & 文章评论& & 最 近 更 新& & tornado捕获和处理404错误的方法SublimeText 2编译python出错的解决方法(python教程之用py2exe将PY文件转成EXE文件python paramiko实现ssh远程访问的方法Python 时间处理datetime实例Python日期操作学习笔记python搭建简易服务器分析与实现忘记ftp密码使用python ftplib库暴力破解从零学Python之hello worldpython实现猜数字游戏(无重复数字)示例分& & 热 点 排 行& & Python入门教程 超详细1小时学会python 中文乱码问题深入分析比较详细Python正则表达式操作指Python字符串的encode与decode研Python open读写文件实现脚本Python enumerate遍历数组示例应Python 深入理解yieldPython+Django在windows下的开发python 文件和路径操作函数小结python 字符串split的用法分享
声明:该文章系网友上传分享,此内容仅代表网友个人经验或观点,不代表本网站立场和观点;若未进行原创声明,则表明该文章系转载自互联网;若该文章内容涉嫌侵权,请及时向
上一篇:下一篇:
相关经验教程
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.001 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.001 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.001 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.001 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.001 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.001 收益
的原创经验被浏览,获得 ¥0.001 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.001 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.001 收益多进程下用requests访问http api时遇到的坑 | 峰云就她了
4,839 views
简单描述下场景,我这边开发了一个服务是用来把Mysql的数据取出来,并进行分词及正负面操作后再导出到elasticsearch里面。 &其实是多线程开发的,原本以为这些操作基本是网络io的操作,用多线程是没有问题. 但是通过这几天的观察速度还真是有些慢,每小时才50w的数据 (另外产品狗催我.. &mysql-es导出服务速度确实有些慢,后来又增加了线程,但对于导出速度没啥提升,最直观的是单进程已经超过100%了. )
通过对函数耗时日志统计, 从mysql取数据,导出到elasticsearch,以及正负面计算都还行,最消耗时间的是分词… &我这不单单是通过api来分词,本地也会调用结巴分词模块..,这加速了导出程序在单进程下cpu 100%. & 个人觉得requests本身性能也一般.
文章写的不是很严谨,欢迎来喷,另外该文后续有更新的,请到原文地址查看更新.&
因为有好几十亿的数据需要从Myqsl导入到Elasticsearch里,现在每分钟3w的速度已经算是龟速了.&
没办法只能换成multiprocessing多进程了. 但当我把多线程切切换成多进程,再次并发调用ik分词api的时候,会遇到下面的报错.&
HTTPConnectionPool(host='xiaorui.cc', port=11011): Max retries exceeded with url: /ik/segment/ (Caused by &class 'socket.error'&: [Errno 110] Connection timed out)
get segment faild, timeout over ...
&HTTPConnectionPool(host='xiaorui.cc', port=11011): Max retries exceeded with url: /ik/segment/ (Caused by &class 'socket.error'&: [Errno 110] Connection timed out)get segment faild, timeout over ...
这问题是tcp连接太多,又没有及时关闭引起的. 一般这问题不能简简单单的配置sysctl.conf就解决的. &当前的requests版本是urllib3的封装,urllib3默认是不开启keepalive长连接的。我们只是单纯引用requests.Request()的话, 他的headers connection keepalive是空的,但是他会根据返回的response headers connection来判断是否进行长连接.
一开始我是在我的的Mac主机下进行api调用,在压力够大的情况也没有出现 HTTPConnectionPool(host=’xiaorui.cc’, port=11011): Max retries exceeded 的报错,但是在线上总是出现这问题. 原因如下.
Centos 下 , 我们可以看到centos下requests连接headers头部是没有keepalive选项:
In [2]: import requests
In [3]: s = requests.Session()
In [4]: s.headers
Out[4]: CaseInsensitiveDict({‘Accept-Encoding’: ‘gzip, deflate, compress’, ‘Accept’: ‘*/*’, ‘User-Agent’: ‘python-requests/2.2.1 CPython/2.7.10 Linux/2.6.32-504.8.1.el6.x86_64′})
Mac ipython下:
In [1]: import requests
In [2]: s = requests.Session()
n [3]: s.headers
Out[3]: {‘Connection’: ‘keep-alive’, ‘Accept-Encoding’: ‘gzip, deflate’, ‘Accept’: ‘*/*’, ‘User-Agent’: ‘python-requests/2.5.1 CPython/2.7.6 Darwin/14.0.0′}
使用requests的session客户端模式和保持长连接的状态. & 下面是我最终调试后的代码.&
#blog: xiaorui.cc
client = requests.Session()
def get_segment(text):
segment_list = []
text_list = []
text_list.append(text)
headers = {'Content-Type': 'application/json','Connection':'keep-alive'}
r = client.post(SIGMENT_ADDRESS, data=json.dumps(text_list), headers=headers)
items = r.json()[0]
for item in items:
kv["k"] = item
kv["v"] = items[item]
segment_list.append(kv)
except Exception as e:
print "get segment faild, timeout over"
return segment_list
123456789101112131415161718192021
&#blog: xiaorui.ccclient = requests.Session()def get_segment(text):&&&&segment_list = []&&&&text_list = []&&&&text_list.append(text)&&&&try:&&&&&&&&headers = {'Content-Type': 'application/json','Connection':'keep-alive'}&&&&&&&&r = client.post(SIGMENT_ADDRESS, data=json.dumps(text_list), headers=headers)&&&&&&&&items = r.json()[0]&&&&&&&&for item in items:&&&&&&&&&&&&kv = {}&&&&&&&&&&&&kv["k"] = item&&&&&&&&&&&&kv["v"] = items[item]&&&&&&&&&&&&segment_list.append(kv)&&&&except Exception as e:&&&&&&&&print "get segment faild, timeout over"&&&&&&&&return []&&&&&return segment_list
通过netstat检查下已经使用建立的连接, 一共10个,因为我开了10个进程.
[ruifengyun@wx-buzz-monitor01 shop_scripts]$netstat
-tunalp|grep '.135'
435 10.x.x.x:65223
xiaorui.cc:80
ESTABLISHED 40743/python
438 10.x.x.x:65097
xiaorui.cc:80
ESTABLISHED 40749/python
421 10.x.x.x:65420
xiaorui.cc:80
ESTABLISHED 40751/python
485 10.x.x.x:65318
xiaorui.cc:80
ESTABLISHED 40746/python
0 10.x.x.x:65424
xiaorui.cc:80
ESTABLISHED 40748/python
0 10.x.x.x:65200
xiaorui.cc:80
ESTABLISHED 40747/python
382 10.x.x.x:65325
xiaorui.cc:80
ESTABLISHED 40752/python
389 10.x.x.x:65026
xiaorui.cc:80
ESTABLISHED 40744/python
0 10.x.x.x:65211
xiaorui.cc:80
ESTABLISHED 40750/python
0 10.x.x.x:65053
xiaorui.cc:80
ESTABLISHED 40745/python
123456789101112
&[ruifengyun@wx-buzz-monitor01 shop_scripts]$netstat&&-tunalp|grep '.135'tcp&&&&&&&&0&&&&435 10.x.x.x:65223&&&&&&&&&& xiaorui.cc:80&&&&&&&&&&&&&&ESTABLISHED 40743/pythontcp&&&&&&&&0&&&&438 10.x.x.x:65097&&&&&&&&&& xiaorui.cc:80&&&&&&&&&&&&&&ESTABLISHED 40749/pythontcp&&&&&&&&0&&&&421 10.x.x.x:65420&&&&&&&&&& xiaorui.cc:80&&&&&&&&&&&&&&ESTABLISHED 40751/pythontcp&&&&&&&&0&&&&485 10.x.x.x:65318&&&&&&&&&& xiaorui.cc:80&&&&&&&&&&&&&&ESTABLISHED 40746/pythontcp&&&&&&&&0&&&&&&0 10.x.x.x:65424&&&&&&&&&& xiaorui.cc:80&&&&&&&&&&&&&&ESTABLISHED 40748/pythontcp&&&&&&&&0&&&&&&0 10.x.x.x:65200&&&&&&&&&& xiaorui.cc:80&&&&&&&&&&&&&&ESTABLISHED 40747/pythontcp&&&&&&&&0&&&&382 10.x.x.x:65325&&&&&&&&&& xiaorui.cc:80&&&&&&&&&&&&&&ESTABLISHED 40752/pythontcp&&&&&&&&0&&&&389 10.x.x.x:65026&&&&&&&&&& xiaorui.cc:80&&&&&&&&&&&&&&ESTABLISHED 40744/pythontcp&&&&&&&&0&&&&&&0 10.x.x.x:65211&&&&&&&&&& xiaorui.cc:80&&&&&&&&&&&&&&ESTABLISHED 40750/pythontcp&&&&&&&&0&&&&&&0 10.x.x.x:65053&&&&&&&&&& xiaorui.cc:80&&&&&&&&&&&&&&ESTABLISHED 40745/python
通过ps aux 可以查看我开启的进程.&
[ruifengyun@wx-buzz-monitor01 shop_scripts]$ ps aux f|grep tran|grep -v grep
0.0 68 pts/9
\_ bulk_transfer
0.0 12 pts/9
\_ bulk_transfer
0.0 96 pts/9
\_ bulk_transfer
0.0 28 pts/9
\_ bulk_transfer
0.0 04 pts/9
\_ bulk_transfer
0.0 00 pts/9
\_ bulk_transfer
0.0 00 pts/9
\_ bulk_transfer
0.0 00 pts/9
\_ bulk_transfer
0.0 92 pts/9
\_ bulk_transfer
0.0 04 pts/9
\_ bulk_transfer
0.0 04 pts/9
\_ bulk_transfer
12345678910111213
&[ruifengyun@wx-buzz-monitor01 shop_scripts]$ ps aux f|grep tran|grep -v grep503&&&&&&40737&&8.3&&0.0 318180 32768 pts/9&&&&Sl+&&16:12&& 0:35&&|&& \_ bulk_transfer503&&&&&&40743 14.7&&0.0 311592 21212 pts/9&&&&Sl+&&16:12&& 1:02&&|&&&&&& \_ bulk_transfer503&&&&&&40744 14.2&&0.0 311592 21196 pts/9&&&&Sl+&&16:12&& 1:00&&|&&&&&& \_ bulk_transfer503&&&&&&40745 13.9&&0.0 311592 21228 pts/9&&&&Sl+&&16:12&& 0:59&&|&&&&&& \_ bulk_transfer503&&&&&&40746 14.3&&0.0 311596 21304 pts/9&&&&Sl+&&16:12&& 1:01&&|&&&&&& \_ bulk_transfer503&&&&&&40747 14.7&&0.0 311596 21300 pts/9&&&&Sl+&&16:12&& 1:02&&|&&&&&& \_ bulk_transfer503&&&&&&40748 14.3&&0.0 311596 21300 pts/9&&&&Sl+&&16:12&& 1:01&&|&&&&&& \_ bulk_transfer503&&&&&&40749 13.9&&0.0 311596 21300 pts/9&&&&Sl+&&16:12&& 0:59&&|&&&&&& \_ bulk_transfer503&&&&&&40750 14.5&&0.0 311596 21292 pts/9&&&&Sl+&&16:12&& 1:01&&|&&&&&& \_ bulk_transfer503&&&&&&40751 14.3&&0.0 311596 21304 pts/9&&&&Sl+&&16:12&& 1:01&&|&&&&&& \_ bulk_transfer503&&&&&&40752 13.6&&0.0 311600 21304 pts/9&&&&Sl+&&16:12&& 0:58&&|&&&&&& \_ bulk_transfer
但是需要特别说明的是,如果你是爬虫相关的业务?抓取的网站还各种各样,每个服务器的地址都不一样,那么你不适用于我上面的方法,而是需要把Connection给关闭. 当然还是看场景. 多方调试下.&
r = requests.post(url=url, data=body, headers={‘Connection’:'close’})
如果你的压力源加大,比如把进程加到100多会出现下面的问题…
ETIMEDOUT (Connection timed out)&
HTTPConnectionPool(host=’xiaorui.cc’, port=80): Max retries exceeded with url: /ik/segment/ (Caused by &class ‘socket.error’&: [Errno 110] Connection timed out)
get segment faild, timeout over
18:20:15,828 – mylogger – INFO – q_task 2093 &, q_res 316
18:20:15,929 – mylogger – INFO – q_task 2091 &, q_res 316
& & & 有不少人认为多线程是没有办法解决并发问题的, &我这里要解决的反对. &python虽然不能并行,但是可以并发的. &python的多线程在网络io操作是有优势,但是在cpu计算下是无用处的. 多线程不易开太多,太多的线程对于系统来说是个不小的负担,毕竟上下文切换是有消耗成本.&& 在多进程下需要注意的东西实在不少,比如数据库连接的cursor游标, 数据的共享.&
如果大家觉得文章对你有些作用! &
帮忙点击广告. 一来能刺激我写博客的欲望,二来好维护云主机的费用.
如果想赏钱,可以用微信扫描下面的二维码.
另外再次标注博客原地址 && …… &&感谢!
您可能也喜欢:
暂无相关产品

我要回帖

更多关于 requests post form 的文章

 

随机推荐