如何使用 python json post请求3+urllib 发送一个 application/json 的请求

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
您的访问请求被拒绝 403 Forbidden - ITeye技术社区
您的访问请求被拒绝
亲爱的会员,您的IP地址所在网段被ITeye拒绝服务,这可能是以下两种情况导致:
一、您所在的网段内有网络爬虫大量抓取ITeye网页,为保证其他人流畅的访问ITeye,该网段被ITeye拒绝
二、您通过某个代理服务器访问ITeye网站,该代理服务器被网络爬虫利用,大量抓取ITeye网页
请您点击按钮解除封锁&Python请求外部POST请求,常见四种请求体
HTTP 协议规定 POST 提交的数据必须放在消息主体(entity-body)中,但协议并没有规定数据必须使用什么编码方式。常见的四种编码方式如下:
1、application/x-www-form-urlencoded
这应该是最常见的 POST 提交数据的方式了。浏览器的原生 form 表单,如果不设置 enctype 属性,那么最终就会以 application/x-www-form-urlencoded 方式提交数据。请求类似于下面这样(无关的请求头在本文中都省略掉了):
Content-Type:
application/x-www-form-charset=utf-8
title=test&sub%5B%5D=1&sub%5B%5D=2&sub%5B%5D=3
2、multipart/form-data
这又是一个常见的 POST 数据提交的方式。我们使用表单上传文件时,必须让 form 的 enctyped 等于这个值,下面是示例
Content-Type:multipart/form- boundary=----WebKitFormBoundaryrGKCBY7qhFd3TrwA
------WebKitFormBoundaryrGKCBY7qhFd3TrwA
Content-Disposition: form- name=&text&
------WebKitFormBoundaryrGKCBY7qhFd3TrwA
Content-Disposition: form- name=&file&; filename=&chrome.png&
Content-Type: image/png
PNG ... content of chrome.png ...
------WebKitFormBoundaryrGKCBY7qhFd3TrwA--
3、application/json
application/json 这个 Content-Type 作为响应头大家肯定不陌生。实际上,现在越来越多的人把它作为请求头,用来告诉服务端消息主体是序列化后的 JSON 字符串。由于 JSON 规范的流行,除了低版本 IE 之外的各大浏览器都原生支持 JSON.stringify,服务端语言也都有处理 JSON 的函数,使用 JSON 不会遇上什么麻烦。
4、text/xml
它是一种使用 HTTP 作为传输协议,XML 作为编码方式的远程调用规范。
那么Python在调用外部http请求时,post请求怎么传请求体呢?说实话楼主只实践过【2、multipart/form-data 】和【3、application/json】
一、multipart/form-data
需要利用python的poster模块,安装poster:pip install poster
from poster.encode import multipart_encode
from poster.streaminghttp import register_openers
body_value = {&package&: &com.tencent.lian&,&version_code&: &66& }
register_openers()
datagen, re_headers = multipart_encode(body_value)
request = urllib2.Request(url, datagen, re_headers)
# 如果有请求头数据,则添加请求头
request .add_header(keys, headers[keys])
result = urllib2.urlopen(request ).read()
二、application/json
import json
body_value = {&package&: &com.tencent.lian&,&version_code&: &66& }
register_openers()
body_value
= json.JSONEncoder().encode(api_body_value)
request = urllib2.Request(url, body_value)
request .add_header(keys, headers[keys])
result = urllib2.urlopen(request ).read()
(window.slotbydup=window.slotbydup || []).push({
id: '2467140',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467141',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467143',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467148',
container: s,
size: '1000,90',
display: 'inlay-fix'最近在使用python做接口测试的研究,发现python中http请求方法有许多种,今天抽点时间把相关内容整理,分享给大家,具体内容如下所示:一、python自带库----urllib2python自带库urllib2使用的比较多,简单使用如下:import urllib2response = urllib2.urlopen(&#39;http://localhost:8080/jenkins/api/json?pretty=true&#39;)print response.read()&简单的get请求import urllib2import urllibpost_data = urllib.urlencode({})response = urllib2.urlopen(&#39;http://localhost:8080/, post_data)print response.read()print response.getheaders()&这就是最简单的urllib2发送post例子。代码比较多二、python自带库--httplibhttplib是一个相对底层的http请求模块,urlib就是基于httplib封装的。简单使用如下:简单的get请求我们再来看post请求是不是觉得太复杂了。每次写还得再翻文档,看看第三种吧三、第三方库--requests发请get请求超级简单:print&requests.get(&#39;http://localhost:8080).text就一句话,再来看看post请求也很简单。再看看如果要认证:是不是比urllib2更简单多了吧,且requests自带json解析。这点非常棒python中的http请求&Python学习交流(PythonTZXY) 
 文章为作者独立观点,不代表微头条立场
的最新文章
在数据分析领域,最热门的莫过于Python和R语言,此前有一篇文章《 别老扯什么Hadoop了,你的数据根本属于python学习者的天堂,在这里你能找到对你有需要的文章。好了,想了解详情的读者朋友们可以点击下方的“阅长久以来,C/C++一直编译着嵌入式系统编程领域,但二者亦拥有自己的缺陷。相比之下,Python则成为嵌入式搜索一下大家就会知道,python有两个主要的版本,python2 和 python3 ,但是python又软件的测试是一件非常乏味的事情,在测试别人编写的软件时尤其如此,程序员通常都只对编写代码感兴趣,而不喜欢文档《神坑》系列将会不定期更新一些可遇而不可求的坑防止他人入坑,也防止自己再次入坑!简化版问题现有两个 View篇幅有点长,有兴趣的,可以收藏慢慢观看。一个NB的安全认证机制。1、背景随着华为手机的销量加大,华为云的捆绑服务使用量也越来越广泛,华为云支持自动同步照片、通讯录、记事本等这篇文章主要介绍了python采用django框架实现支付宝即时到帐接口的相关资料,需要的朋友可以参考下爬虫框架Scrapy实战神秘大牛精彩分享!!!Python字符串关键点有下面几点:1.一些引号分隔的字符你可以把字符串看出是Python的一种数据类型,在一般来说,我们会将自己写的Python模块与python自带的模块分开存放以达到便于维护的目的。那么如何在P玩过电脑游戏的同学对于外挂肯定不陌生,但是你在用外挂的时候有没有想过如何做一个外挂呢?(当然用外挂不是那么道通知:从明天开始,我会每天定个时间。准时发布文章,希望大家多多关注。你们也可以加我好友,向我提意见,说你们想通过socket实现局域网内的聊天工具。service.py文件如下:client.py文件内容如下:执行结英文链接: http://creative-punch.net/2015/07/frameworks-and现象:先上一段代码。一、概念(原理)  1、在详细的了解python中赋值、copy和deepcopy之前,这篇文章主要介绍了Python中为什么要用self探讨,本文讲解了Python要self的理由、为何Python给self赋值而你不必给self赋值?等内容,需要的朋友可以参考下在数据分析领域,最热门的莫过于Python和R语言,此前有一篇文章《 别老扯什么Hadoop了,你的数据根本本篇文章主要介绍了python字符串相关的重点,文章虽短,但是都是干货!以下是我做调试或分析时用过的工具的一个概览。如果你知道有更好的工具,请在评论中留言,可以不用很完整的介绍。当我们用open()函数去打开文件的时候,有好几种打开的模式。'r'->只读'w'->只写,文件已存在则清空先说1双引号与3个双引号的区别,双引号所表示的字符串通常要写成一行 如: s1 = "hello,world(1) os.system仅仅在一个子终端运行系统命令,而不能获取命令执行后的返回信息system(comm深度学习入门资料:让你了解该运用哪些框架和库下面小编就为大家带来一篇python操作字典类型的常用方法(推荐)。小编觉得挺不错的,现在分享给大家,也给大家做个参考,一起跟随小编过来看看吧在python用import或者from...import或者from...import...as...来导1、Set基本数据类型a、set集合,是一个无序且不重复的元素集合class set(object):
"Django 作为一个杰出的Python开源框架,或许得不到和其它流行框架如Rails这样多的赞美,但是它和一句话概括: Python的模块其实就是封装了一个或者多个功能的代码集合,模块可以是一个文件也可以是一个目录pycurl是功能强大的python的url库,是用c语言写的,速度很快,比urllib和httplib都快本文有点啰嗦,但是对于初学的你来说,可以看看,虽然不能让你一下成神,但是可以让你少点弯路,快速的入门!Django是一个开放源代码的Web应用框架,由Python写成。采用了MVC的软件设计模式,即模型M,视图在各种语言平台中,python涌现的web框架恐怕是最多的,是一个百花齐放的世界,各种micro-frame基本上每个学完python的人,总想自己动手写一个程序,但是写程序不用数据库,显得太低端,那么python链很多时候我们为了管理方便会把依稀很小的图片存入数据库,有人可能会想这样会不会对数据库造成很大的压力,其实大家我们在《Appium自动化测试系列1-Appium环境的安装和配置》里已经搭好了Appium的基本环境,这一Python测试脚本-测试YY代码:公有方法序列集合支持索引和分片操作。 索引格式为:seq[i]。负数索引从序列的尾部开始计数,最尾端的元素索掌握了小小的像素,我们可以使用更加复杂一点的东西了,对,就是图像,无数的像素的集合~还记得上次我们为了生成的今天说明字体模块和一些错误处理。使用字体模块就像上一次说的,一个游戏,再怎么寒碜也得有文字,俄罗斯方块还有个这次开始是真正的游戏编程,以前都是基础的基础啊。电脑游戏总是倾向于图像化的,尽量的要看得到听得到(现在的技术OK,到该讲显示的时候了。没人可以否定好的画面是一款游戏吸引人最直接最诱人的因素,虽说滥画面高游戏度的作品也这次的内容很多,又很重要,一遍看下来云里雾里或者看的时候明白看完了全忘了什么的估计很多,慢慢学习吧~~多看看动手写写,其实都很简单。这 是一个Pygame的系列,翻译自Will McGugan的《Beginning Game Developredis相信大家都很熟悉了,和memcached一样是一个高性能的key-value数据库,至于什么是缓存篇幅有点长,有兴趣的,可以收藏慢慢观看。python语言中的列表排序方法有三个:reverse反转/倒序排序、sort正序排序、sorted可以获取PythonTZXY为Python学习者提供一个免费学习的平台。热门文章最新文章PythonTZXY为Python学习者提供一个免费学习的平台。依然在路上
You are here:
/ Python使用Cookie字符串发起HTTP请求的几个方法(1)
一般,我们HTTP抓包得到的Cookie位于Request Header中,格式如下:
Cookie: key1=val1; key2=val2; key3=val3
要使用该字符串发起HTTP请求,有几种方法:
使用httplib添加到headers中
使用cookielib创建CookieJar对象在urllib2中使用
使用requests模块
它们各有不足:
httplib不会自动管理cookie(不会在后续的请求中自动添加、更新、删除过期)
cookielib的处理过程稍复杂
requests需要另安装
使用httplib直接添加cookie到header
如果不需要程序自己管理cookie,这个方法是极简单的。下面简单示例处理GET请求:
import httplib
import urlparse
def request(url, cookie=''):
ret = urlparse.urlparse(url)
# Parse input URL
if ret.scheme == 'http':
conn = httplib.HTTPConnection(ret.netloc)
elif ret.scheme == 'https':
conn = httplib.HTTPSConnection(ret.netloc)
url = ret.path
if ret.query: url += '?' + ret.query
if ret.fragment: url += '#' + ret.fragment
if not url: url = '/'
conn.request(method='GET', url=url , headers={'Cookie': cookie})
return conn.getresponse()
if __name__ == '__main__':
cookie_str = 'tLargeScreenP=1; Authorization=Basic%20HereIsMyS subType=pcS TPLoginTimes=2'
url = 'http://192.168.1.253'
html_doc = request(url, cookie_str).read()
print 'With Auth:', re.search('&title&(.*?)&/title&', html_doc, re.IGNORECASE).group(1)
html_doc = request(url).read()
print 'Without Auth:', re.search('&title&(.*?)&/title&', html_doc, re.IGNORECASE).group(1)
123456789101112131415161718192021222324252627
import httplibimport urlparse&def request(url, cookie=''):&&&&ret = urlparse.urlparse(url)&&&&# Parse input URL&&&&if ret.scheme == 'http':&&&&&&&&conn = httplib.HTTPConnection(ret.netloc)&&&&elif ret.scheme == 'https':&&&&&&&&conn = httplib.HTTPSConnection(ret.netloc)&&&&&&&&&&&&url = ret.path&&&&if ret.query: url += '?' + ret.query&&&&if ret.fragment: url += '#' + ret.fragment&&&&if not url: url = '/'&&&&&&&&conn.request(method='GET', url=url , headers={'Cookie': cookie})&&&&return conn.getresponse()&if __name__ == '__main__':&&&&cookie_str = 'tLargeScreenP=1; Authorization=Basic%20HereIsMyS subType=pcS TPLoginTimes=2'&&&&url = 'http://192.168.1.253'&&&&html_doc = request(url, cookie_str).read()&&&&import re&&&&print 'With Auth:', re.search('&title&(.*?)&/title&', html_doc, re.IGNORECASE).group(1)&&&&&html_doc = request(url).read()&&&&print 'Without Auth:', re.search('&title&(.*?)&/title&', html_doc, re.IGNORECASE).group(1)
request函数就是全部的内容,测试IP 192.168.1.253是我房间的无线路由器。第一次HTTP请求带Cookie,第二次不带Cookie,返回的标题不一样:
Powered by问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
我最近在写一个爬虫,抓取携程网用户评论信息。不知道如何用python发送ajax请求,获取服务器端数据,有说模拟浏览器执行,不知道该怎么做?求指点.下面是携程网的ajax代码。可不可直接调用服务器端的JavaScript函数呢?
function GetCommentListHtml() {
url: '/destinationsite/TTDSecond/SharedView/AsynCommentView',
type: 'post',
async: true,
'poiID': poiid,
'districtId': districtid,
'districtEName': districtename,
'pagenow': pagenow,
'order': order,
'star': star,
'tourist': tourist,
'resourceId': resourceid,
'resourcetype': resourcetype
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
#-*-coding:utf-8-*-
#!/usr/bin/python
Message Bomb v1.0
#From: sb.f4ck.net
By: xfkxfk
import json
import urllib2
import sys
def request_ajax_url(url,body,referer=None,cookie=None,**headers):
req = urllib2.Request(url)
req.add_header('Content-Type', 'application/json')
req.add_header('X-Requested-With','XMLHttpRequest')
if cookie:
req.add_header('Cookie',cookie)
if referer:
req.add_header('Referer',referer)
if headers:
for k in headers.keys():
req.add_header(k,headers[k])
postBody = json.dumps(body)
response = urllib2.urlopen(req, postBody)
if response:
return response
def run():
import time
"use username: use password:123456"
login_url = '/member/Login.aspx'
login_body = {"action":"login","UserName":"xfkxfk","Password":"123456","AutomaticLogin":False}
login_referer = "/member/Login.aspx?ReturnUrl=aHR0cDovL3d3dy5sdXNlbi5jb20vRGVmYXVsdC5hc3B4"
url = '/Member/MobileValidate.aspx'
referer = "/Member/ModifyMobileValidate.aspx"
headers = {}
response = request_ajax_url(login_url,login_body,login_referer)
if response.read() == "1":
print " Login Success !!!"
if response.headers.has_key('set-cookie'):
set_cookie = response.headers['set-cookie']
print " Get set-cookie Failed !!! May Send Messages Failed ~~~"
if len(sys.argv) & 3:
print "\nUsage: python " + sys.argv[0] + "mobile_number" + "count\n"
sys.exit()
mobile_number = sys.argv[1]
count = sys.argv[2]
body = {"action":"GetValidateCode","Mobile":mobile_number}
while i & int(count):
response = request_ajax_url(url,body,referer,set_cookie)
if response.read() == "发送成功":
print " Send " + count + " Messages To " + mobile_number + " !!!"
if __name__ == "__main__":
摘自网络的代码。关键在于把头的请求类型设置成XMLHttpRequest
分享到微博?
Hi,欢迎来到 SegmentFault 技术社区!⊙▽⊙ 在这里,你可以提出编程相关的疑惑,关注感兴趣的问题,对认可的回答投赞同票;大家会帮你解决编程的问题,和你探讨技术更新,为你的回答投上赞同票。
明天提醒我
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)
我要该,理由是:
扫扫下载 App
SegmentFault
一起探索更多未知

我要回帖

更多关于 python3 urllib json 的文章

 

随机推荐