python的urllib如何POST传递数组参数?

比如names=['foo','bar']... 比如names = ['foo', 'bar'] 展开
 我来答
一点设计演示
高粉答主

推荐于2016-01-19 · 职场/教育各类模板,衷于原创
一点设计演示
采纳数:874 获赞数:83632

向TA提问 私信TA
展开全部
1.如果机器上安装了 Python 的 setuptools,可以通过下面的命令来安装 poster:
easy_install poster

# test_client.pyfrom poster.encode import multipart_encodefrom poster.streaminghttp import register_openersimport urllib2# 在 urllib2 上注册 http 流处理句柄register_openers()# 开始对文件 "DSC0001.jpg" 的 multiart/form-data 编码# "image1" 是参数的名字,一般通过 HTML 中的 <input> 标签的 name 参数设置# headers 包含必须的 Content-Type 和 Content-Length# datagen 是一个生成器对象,返回编码过后的参数datagen, headers = multipart_encode({"image1": open("DSC0001.jpg", "rb")})# 创建请求对象request = urllib2.Request("http://localhost:5000/upload_image", datagen, headers)# 实际执行请求并取得返回print urllib2.urlopen(request).read()
很简单,文件就上传完成了。
2.其中那个 register_openers() 相当于以下操作:
from poster.encode import multipart_encodefrom poster.streaminghttp import StreamingHTTPHandler, StreamingHTTPRedirectHandler, StreamingHTTPSHandlerhandlers = [StreamingHTTPHandler, StreamingHTTPRedirectHandler, StreamingHTTPSHandler]opener = urllib2.build_opener(*handlers)urllib2.install_opener(opener)

3.另外,poster 也可以携带 cookie,比如:
opener = poster.streaminghttp.register_openers()opener.add_handler(urllib2.HTTPCookieProcessor(cookielib.CookieJar()))params = {'file': open("test.txt", "rb"), 'name': 'upload test'}datagen, headers = poster.encode.multipart_encode(params)request = urllib2.Request(upload_url, datagen, headers)result = urllib2.urlopen(request)
againinput
推荐于2017-12-16 · TA获得超过148个赞
知道小有建树答主
回答量:389
采纳率:100%
帮助的人:380万
展开全部
  1. 现在一般用urllib2,更好用。

  2. 如何传递post数据的话,我之前写了完整的教程。

    其中的,部分代码为:

    postDict = {
        'isPhone'       : "false",
        'callback'      : "parent.bdPass.api.login._postCallback",
        'username'      : username,
        'password'      : password,
        ...
    };
    postData = urllib.urlencode(postDict);
    req = urllib2.Request(baiduMainLoginUrl, postData);
    # in most case, for do POST request, the content-type, is application/x-www-form-urlencoded
    req.add_header('Content-Type', "application/x-www-form-urlencoded");
    resp = urllib2.urlopen(req);
  3. 完整的例子,参见:

    (自己google搜标题即可找到地址)

    【教程】模拟登陆网站 之 Python版(内含两种版本的完整的可运行的代码)


本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
kaisa1028
2013-07-29 · TA获得超过1.1万个赞
知道大有可为答主
回答量:5429
采纳率:28%
帮助的人:2634万
展开全部
import urllib
params = urllib.urlencode({'names':['foo','bar']})
f = urllib.urlopen("http://nbyh2012.net", params)
print f.read()
追问
不对。这样做,list会被转化为字符串形式。
追答
那难不成你还想在http request里面传递python的object?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
遇见Linux
2013-07-29
知道答主
回答量:22
采纳率:0%
帮助的人:19.1万
展开全部
post一般接受的是字典类型(参数:参数值),你这个是列表,只需要将数据类型转换一下就可以吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式