Ich kann es nicht googeln, aber ich möchte eine Funktion, die dies tut:
Akzeptiere 3 Argumente (oder mehr, was auch immer):
- URL
- ein Wörterbuch der Parameter
- POST oder GET
Geben Sie mir die Ergebnisse und den Antwortcode zurück.
Gibt es einen Ausschnitt, der dies tut?
Antworten:
Anfragen
https://github.com/kennethreitz/requests/
Hier sind einige gebräuchliche Verwendungsmöglichkeiten:
import requests url = 'https://...' payload = {'key1': 'value1', 'key2': 'value2'} # GET r = requests.get(url) # GET with params in URL r = requests.get(url, params=payload) # POST with form-encoded data r = requests.post(url, data=payload) # POST with JSON import json r = requests.post(url, data=json.dumps(payload)) # Response, status etc r.text r.status_code
httplib2
https://github.com/jcgregorio/httplib2
>>> from httplib2 import Http >>> from urllib import urlencode >>> h = Http() >>> data = dict(name="Joe", comment="A test comment") >>> resp, content = h.request("http://bitworking.org/news/223/Meet-Ares", "POST", urlencode(data)) >>> resp {'status': '200', 'transfer-encoding': 'chunked', 'vary': 'Accept-Encoding,User-Agent', 'server': 'Apache', 'connection': 'close', 'date': 'Tue, 31 Jul 2007 15:29:52 GMT', 'content-type': 'text/html'}
quelle
from httplib2 import Http as h
Http
Klasse, ohne sie zu aliasen :h = Http()
, nichth = Http
.Noch einfacher: über das Anforderungsmodul .
import requests get_response = requests.get(url='http://google.com') post_data = {'username':'joeb', 'password':'foobar'} # POST some form-encoded data: post_response = requests.post(url='http://httpbin.org/post', data=post_data)
Um Daten zu senden, die nicht formularcodiert sind, senden Sie sie serialisiert als Zeichenfolge (Beispiel aus der Dokumentation ):
import json post_response = requests.post(url='http://httpbin.org/post', data=json.dumps(post_data)) # If using requests v2.4.2 or later, pass the dict via the json parameter and it will be encoded directly: post_response = requests.post(url='http://httpbin.org/post', json=post_data)
quelle
data=json.dumps(post_data)
Sie könnten dies verwenden, um urllib2 zu verpacken:
def URLRequest(url, params, method="GET"): if method == "POST": return urllib2.Request(url, data=urllib.urlencode(params)) else: return urllib2.Request(url + "?" + urllib.urlencode(params))
Dadurch wird ein Anforderungsobjekt zurückgegeben , das Ergebnisdaten und Antwortcodes enthält.
quelle
Request
Objekt selbst hat keine Ergebnisdaten oder Antwortcodes - es muss über eine Methode wie "angefordert" werdenurlopen
.r = urllib2.urlopen(url)
und dannr.readlines()
und / oderr.getcode()
. Möglicherweise möchten Sie stattdessen auch Anfragen verwenden.import urllib def fetch_thing(url, params, method): params = urllib.urlencode(params) if method=='POST': f = urllib.urlopen(url, params) else: f = urllib.urlopen(url+'?'+params) return (f.read(), f.code) content, response_code = fetch_thing( 'http://google.com/', {'spam': 1, 'eggs': 2, 'bacon': 0}, 'GET' )
[Aktualisieren]
Einige dieser Antworten sind alt. Heute würde ich das
requests
Modul wie die Antwort von Robaple verwenden.quelle
Ich weiß, dass Sie nach GET und POST gefragt haben, aber ich werde CRUD bereitstellen, da andere dies möglicherweise nur für den Fall benötigen: (Dies wurde in Python 3.7 getestet. )
#!/usr/bin/env python3 import http.client import json print("\n GET example") conn = http.client.HTTPSConnection("httpbin.org") conn.request("GET", "/get") response = conn.getresponse() data = response.read().decode('utf-8') print(response.status, response.reason) print(data) print("\n POST example") conn = http.client.HTTPSConnection('httpbin.org') headers = {'Content-type': 'application/json'} post_body = {'text': 'testing post'} json_data = json.dumps(post_body) conn.request('POST', '/post', json_data, headers) response = conn.getresponse() print(response.read().decode()) print(response.status, response.reason) print("\n PUT example ") conn = http.client.HTTPSConnection('httpbin.org') headers = {'Content-type': 'application/json'} post_body ={'text': 'testing put'} json_data = json.dumps(post_body) conn.request('PUT', '/put', json_data, headers) response = conn.getresponse() print(response.read().decode(), response.reason) print(response.status, response.reason) print("\n delete example") conn = http.client.HTTPSConnection('httpbin.org') headers = {'Content-type': 'application/json'} post_body ={'text': 'testing delete'} json_data = json.dumps(post_body) conn.request('DELETE', '/delete', json_data, headers) response = conn.getresponse() print(response.read().decode(), response.reason) print(response.status, response.reason)
quelle