هل هناك أي طريقة للقيام HTTP وضعت في بايثون

StackOverflow https://stackoverflow.com/questions/111945

  •  02-07-2019
  •  | 
  •  

سؤال

أحتاج إلى تحميل بعض البيانات إلى ملقم باستخدام HTTP PUT في بيثون.من مختصر القراءة urllib2 مستندات, إلا أنها HTTP POST.هل هناك أي طريقة للقيام HTTP PUT في الثعبان ؟

هل كانت مفيدة؟

المحلول

لقد استخدمت مجموعة متنوعة من بيثون HTTP يبس في الماضي, و لقد استقر على 'طلبات كما المفضلة.القائمة يبس كانت جميلة صالحة للاستعمال واجهات, ولكن الكود في نهاية المطاف كونها بضعة أسطر طويلة جدا لعمليات بسيطة.الأساسية وضع طلبات تبدو مثل:

payload = {'username': 'bob', 'email': 'bob@bob.com'}
>>> r = requests.put("http://somedomain.org/endpoint", data=payload)

ثم يمكنك التحقق من رمز حالة الاستجابة مع:

r.status_code

أو الاستجابة مع:

r.content

طلبات لديها الكثير synactic السكر و الاختصارات التي سوف تجعل حياتك أسهل.

نصائح أخرى

import urllib2
opener = urllib2.build_opener(urllib2.HTTPHandler)
request = urllib2.Request('http://example.org', data='your_put_data')
request.add_header('Content-Type', 'your/contenttype')
request.get_method = lambda: 'PUT'
url = opener.open(request)

Httplib يبدو خيارا أنظف.

import httplib
connection =  httplib.HTTPConnection('1.2.3.4:1234')
body_content = 'BODY CONTENT GOES HERE'
connection.request('PUT', '/url/path/to/put/to', body_content)
result = connection.getresponse()
# Now result.status and result.reason contains interesting stuff

يجب أن يكون لديك نظرة على httplib وحدة.ينبغي أن تتيح لك إجراء أي نوع من طلب HTTP تريد.

أنا بحاجة إلى حل هذه المشكلة أيضا حين يعود لدرجة أنني يمكن أن يكون بمثابة العميل RESTful API.أنا استقر على httplib2 لأنه سمح لي أن أرسل وضع وحذف بالإضافة إلى الحصول على وظيفة.Httplib2 ليست جزءا من المكتبة القياسية ولكن يمكنك بسهولة الحصول عليه من متجر الجبن.

يمكنك استخدام طلبات المكتبة ، فإنه يبسط الأمور كثيرا في مقارنة أخذ urllib2 النهج.أولا تثبيت من نقطة:

pip install requests

أكثر على تثبيت طلبات.

ثم إعداد وضع الطلب:

import requests
import json
url = 'https://api.github.com/some/endpoint'
payload = {'some': 'data'}

# Create your header as required
headers = {"content-type": "application/json", "Authorization": "<auth-key>" }

r = requests.put(url, data=json.dumps(payload), headers=headers)

ترى التشغيل السريع للطلبات المكتبة.أعتقد أن هذا هو أبسط كثيرا مما urllib2 ولكن تتطلب هذه حزمة إضافية ليتم تثبيتها و المستوردة.

وقد جعل هذا أفضل في python3 وموثقة في في stdlib الوثائق

على urllib.request.Request اكتسبت الدرجة method=... المعلمة في python3.

بعض نماذج الاستخدام:

req = urllib.request.Request('https://example.com/', data=b'DATA!', method='PUT')
urllib.request.urlopen(req)

وأوصى أيضا httplib2 جو Gregario.يمكنني استخدام هذا بانتظام بدلا من httplib في مستوى lib.

هل ألقيت نظرة على put.py?لقد استعملت في الماضي.يمكنك أيضا مجرد هاك الخاصة بك طلب urllib.

يمكنك بالطبع لفة الخاص بك مع القائمة المكتبات القياسية في أي مستوى من مآخذ تصل إلى التغيير والتبديل urllib.

http://pycurl.sourceforge.net/

"PyCurl هو بيثون واجهة libcurl."

"libcurl هو حر وسهلة الاستخدام من جانب العميل رابط نقل المكتبة ...يدعم ...HTTP وضع"

"العيب الرئيسي مع PycURL هو قريب طبقة رقيقة على libcurl دون أي من تلك جميل Pythonic الطبقة الهرمية.هذا يعني أنه لديه إلى حد ما حاد منحنى التعلم إلا إذا كنت بالفعل على دراية libcurl C API."

إذا كنت ترغب في البقاء داخل المكتبة القياسية ، يمكنك فرعية urllib2.Request:

import urllib2

class RequestWithMethod(urllib2.Request):
    def __init__(self, *args, **kwargs):
        self._method = kwargs.pop('method', None)
        urllib2.Request.__init__(self, *args, **kwargs)

    def get_method(self):
        return self._method if self._method else super(RequestWithMethod, self).get_method()


def put_request(url, data):
    opener = urllib2.build_opener(urllib2.HTTPHandler)
    request = RequestWithMethod(url, method='PUT', data=data)
    return opener.open(request)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top