request.post函数的替代方案?

时间:2015-12-15 23:24:59

标签: python python-2.7 python-requests

我不能使用python请求包(长篇大论,让我们假设我已经用尽了使用该包的所有可能性)

是否有替代软件包可以提供以下代码的确切功能?

import requests
requests.post(URL, data=DATA, auth=(USERNAME, PASSWORD), headers=HEADER)

3 个答案:

答案 0 :(得分:3)

如果由于模块名称导致唯一的问题是导入,则始终可以按完整路径导入或更改模块搜索路径并在导入后重置它。为了避免冲突,您可以使用import requests as requests2或类似的东西。 有关第一个选项或有关搜索路径的文档,请参阅以下问题。

How to import a module given the full path?

https://docs.python.org/2/tutorial/modules.html#the-module-search-path

答案 1 :(得分:2)

另一种方法,httplib用法

import httplib
import urllib
from base64 import b64encode

# your form
form_data = {'a':1 'b':2}
params = urllib.urlencode(form_data)

# build authorization
user_and_pass = b64encode(b"username:password").decode("ascii")

# headers
headers = {'Authorization': 'Basic %s' % user_and_pass}

# connection
conn = httplib.HTTPConnection("example.com")
conn.request('POST', '/v3/call_api', params, headers)

# get result
response = conn.getresponse()

print response.status, response.reason

data = response.read()

conn.close()

答案 2 :(得分:1)

来自urllib2.urlopen

  

"提供数据参数时,HTTP请求将是POST而不是GET。"

所以类似的东西(我将使用一个图像示例只是因为它太难以辨认出来):

import urllib
import urllib2

import numpy as np
import cv2

image_to_send = np.zeros(512, np.uint8)
buffer_image = \
    np.array(cv2.imencode('.png', image_to_send)[1]).tostring()
post_data = \
    urllib.urlencode((('img_type','.png'),('img_data',buffer_image)))
req = \
    urllib2.urlopen('http://www.yourdestination.com/imageupload/', data=post_data)

如果您需要身份验证,则需要继承urllib.FancyURLopener,并覆盖prompt_user_passwd