Python - Multipart表单数据无法使用MultipartPostHandler库进行身份验证

时间:2014-09-23 12:11:02

标签: python httprequest urllib2 multipartform-data python-2.6

我正在使用MultipartPostHandler library创建多部分表单数据请求。

我遇到了一个问题,可能需要在库中进行更新。我们使用的是lighttpd web服务器,我们的cgi-bin文件夹受用户名和密码保护。

每当我们需要使用该文件夹中的cgi文件时,我们需要使用用户名和密码对其进行身份验证。

当请求中没有附加参数但在请求中有任何参数关联时失败,这种方法很有效。

请问在请求中使用参数时如何验证网址?

import MultipartPostHandler
import urllib2

def handle_authentication(url):
    """handle_authentication description"""
    try:
        passman = urllib2.HTTPPasswordMgrWithDefaultRealm()
        passman.add_password(None, url, USERNAME, PASSWORD)
        authhandler = urllib2.HTTPBasicAuthHandler(passman)
        opener = urllib2.build_opener(authhandler)
        urllib2.install_opener(opener)
    except urllib2.HTTPError:
        print ERROR_300
        sys.exit(1)

另一个功能:

params = {'BoardType': board_type,
          'SataConfigFile': open(input_path, 'rb')}
opener = urllib2.build_opener(MultipartPostHandler.MultipartPostHandler)
print opener
try:
    handle_authentication(url)
    response = opener.open(url, params)

这不会对网址进行身份验证 - 您有解决方案吗?

1 个答案:

答案 0 :(得分:0)

我不确定这是唯一的问题,但似乎你没有正确地组合开启者。您需要使用MultiPartPostHandler和HttpBasicAuthHandler作为参数调用build_opener。

所以不要使用install_opener,试试这个:

import MultipartPostHandler
import urllib2

def build_authhandler(url):
    passman = urllib2.HTTPPasswordMgrWithDefaultRealm()
    passman.add_password(None, url, USERNAME, PASSWORD)
    authhandler = urllib2.HTTPBasicAuthHandler(passman)
    return urllib2.build_opener(authhandler)

params = {'BoardType': board_type,
          'SataConfigFile': open(input_path, 'rb')}
auth_opener = build_authhandler(url)
opener = urllib2.build_opener(MultipartPostHandler.MultipartPostHandler, auth_opener)

try:    
    response = opener.open(url, params)