Python中简单的URL GET / POST函数

我似乎无法谷歌它,但我想要一个这样做的function:

接受3个参数(或更多,不pipe):

  • url
  • 一个参数字典
  • POST或GET

返回结果和响应代码。

有没有这样的片段?

要求

https://github.com/kennethreitz/requests/

以下是一些常用的方法:

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'} 

更简单:通过请求模块。

 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) 

要发送未经过表格编码的数据,请将其作为string序列化(从文档中获取示例):

 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) 

你可以用它来包装urllib2:

 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)) 

这将返回一个具有结果数据和响应代码的Request对象。

 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' ) 

[更新]

其中一些答案是旧的。 今天,我将使用requests模块,如robaple的答案。