Я не могу использовать пакет запросов Python (длинная история, давайте просто предположим, что я исчерпал все возможности для использования этого пакета)

Есть ли альтернативный пакет, который бы предоставил точную функциональность следующего кода?

import requests
requests.post(URL, data=DATA, auth=(USERNAME, PASSWORD), headers=HEADER)
2
Craig 16 Дек 2015 в 02:24

3 ответа

Лучший ответ

Один из альтернативных способов, использование 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()
3
mrDinkelman 16 Дек 2015 в 07:35

Если ваша единственная проблема - импорт из-за имени модуля, вы всегда можете импортировать по полному пути или изменить путь поиска модуля и сбросить его после импорта. Во избежание конфликтов вы можете использовать import requests as requests2 или что-то подобное. См. Следующий вопрос для первого варианта или документацию о пути поиска.

Как импортировать модуль с указанием полного пути?

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

3
Community 23 Май 2017 в 12:15

От urllib2.urlopen

«HTTP-запрос будет POST вместо GET, если указан параметр data».

Итак, что-то вроде (я буду использовать пример изображения только потому, что это было так чертовски непонятно, чтобы выяснить):

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

1
whunterknight 16 Дек 2015 в 01:06