在python中,模擬http客戶端發送get和post請求,主要用httplib模塊的功能。
1、python發送GET請求
我在本地建立一個測試環境,python.php的內容就是輸出一句話:
<?php echo 'python httplib study!'.PHP_EOL; var_dump($_POST); ?>
python發送get請求代碼:
import httplib httpClient = None try: httpClient = httplib.HTTPConnection('localhost', 80, timeout=10) httpClient.request('GET', '/python.php') # response是HTTPResponse對象 response = httpClient.getresponse() print response.status print response.reason print response.read() except Exception, e: print e finally: if httpClient: httpClient.close()
上面代碼中使用了finally來保證即使出錯的時候也能關閉httpClient。運行這個程序,在我的電腦上輸出結果如下:
2、python發送POST請求
修改python.php內容,打印出$_POST數組:
<?php echo 'python httplib study!'.PHP_EOL; var_dump($_POST); ?>
python發起post請求代碼:
#!/usr/bin/env python # -*- coding: gbk -*- # -*- coding: utf-8 -*- import urllib, httplib httpClient = None try: params = urllib.urlencode({'name': 'waitalone.cn', 'age': '5'}) headers = {'Content-type': 'application/x-www-form-urlencoded', 'Accept': 'text/plain'} httpClient = httplib.HTTPConnection('localhost', 80, timeout=10) httpClient.request('POST', '/python.php', params, headers) response = httpClient.getresponse() print response.status print response.reason print response.read() print response.getheaders() except Exception, e: print e finally: if httpClient: httpClient.close()
Python3處理HTTP請求
Python3處理HTTP請求的包:http.client,urllib,urllib3,requests 其中,http 比較 low-level,一般不直接使用 urllib更 high-level一點,屬於標准庫。urllib3跟urllib類似,擁有一些重要特性而且易於使用,但是屬於擴展庫,需要安裝 requests 基於urllib3 ,也不是標准庫,但是使用非常方便
# import http.client # http_client = http.client.HTTPConnection('localhost',8080,timeout=10) # http_client.request('get','/jenkins/api/json?pretty=true') # response = http_client.getresponse() # print(response.status) # print(response.read()) # import urllib.request # response = urllib.request.urlopen('http://localhost:8080/jenkins/api/json?pretty=true') # print(response.status) # print(response.read()) # import urllib3 # response = urllib3.PoolManager().request('get','http://localhost:8080/jenkins/api/json?pretty=true') # print(response.status) # import requests # response = requests.get('http://localhost:8080/jenkins/api/json?pretty=true') # print(response.status_code) # print(response.text) # print(response.json()) # print(response.reason) import requests from requests.auth import HTTPBasicAuth response = requests.post('http://localhost:8080/jenkins/job/check_python_version/build',auth=('admin','wangmin')) print (response.status_code) print (response.reason) print(response.headers)
JSON
import urllib.request import json if __name__ == "__main__": restUri = "https://lxxx"; PostParam = "data=123456" DATA = PostParam.encode('utf8') req = urllib.request.Request(url = restUri, data=DATA, method='POST') req.add_header('Content-type', 'application/x-www-form-urlencoded') r = urllib.request.urlopen(req).read() print(r.decode('utf8')) org_obj = json.loads(r.decode('utf8')) print(org_obj['token'])