国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python開發的HTTP庫requests詳解

2020-01-04 16:49:52
字體:
來源:轉載
供稿:網友

Requests 是使用 Apache2 Licensed 許可證的 基于python/269617.html">Python開發的HTTP 庫,其在Python內置模塊的基礎上進行了高度的封裝,從而使得Pythoner進行網絡請求時,變得美好了許多,使用Requests可以輕而易舉的完成瀏覽器可有的任何操作。

1. GET請求

 # 1、無參數實例   import requests   ret = requests.get('https://github.com/timeline.json')   print(ret.url) print(ret.text) # 2、有參數實例   import requests   payload = {'key1': 'value1', 'key2': 'value2'} ret = requests.get("http://httpbin.org/get", params=payload)   print(ret.url) print(ret.text)

2. POST請求

 # 1、基本POST實例   import requests   payload = {'key1': 'value1', 'key2': 'value2'} ret = requests.post("http://httpbin.org/post", data=payload)   print(ret.text)     # 2、發送請求頭和數據實例   import requests import json   url = 'https://api.github.com/some/endpoint' payload = {'some': 'data'} headers = {'content-type': 'application/json'}   ret = requests.post(url, data=json.dumps(payload), headers=headers)   print(ret.text) print(ret.cookies)

3. 其它請求

 requests.get(url, params=None, **kwargs) requests.post(url, data=None, json=None, **kwargs) requests.put(url, data=None, **kwargs) requests.head(url, **kwargs) requests.delete(url, **kwargs) requests.patch(url, data=None, **kwargs) requests.options(url, **kwargs)   # 以上方法均是在此方法的基礎上構建 requests.request(method, url, **kwargs)

4. 請求參數

def request(method, url, **kwargs):  """Constructs and sends a :class:`Request <Request>`.  :param method: method for the new :class:`Request` object.  :param url: URL for the new :class:`Request` object.  :param params: (optional) Dictionary or bytes to be sent in the query string for the :class:`Request`.  :param data: (optional) Dictionary, bytes, or file-like object to send in the body of the :class:`Request`.  :param json: (optional) json data to send in the body of the :class:`Request`.  :param headers: (optional) Dictionary of HTTP Headers to send with the :class:`Request`.  :param cookies: (optional) Dict or CookieJar object to send with the :class:`Request`.  :param files: (optional) Dictionary of ``'name': file-like-objects`` (or ``{'name': file-tuple}``) for multipart encoding upload.    ``file-tuple`` can be a 2-tuple ``('filename', fileobj)``, 3-tuple ``('filename', fileobj, 'content_type')``    or a 4-tuple ``('filename', fileobj, 'content_type', custom_headers)``, where ``'content-type'`` is a string    defining the content type of the given file and ``custom_headers`` a dict-like object containing additional headers    to add for the file.  :param auth: (optional) Auth tuple to enable Basic/Digest/Custom HTTP Auth.  :param timeout: (optional) How long to wait for the server to send data    before giving up, as a float, or a :ref:`(connect timeout, read    timeout) <timeouts>` tuple.  :type timeout: float or tuple  :param allow_redirects: (optional) Boolean. Set to True if POST/PUT/DELETE redirect following is allowed.  :type allow_redirects: bool  :param proxies: (optional) Dictionary mapping protocol to the URL of the proxy.  :param verify: (optional) whether the SSL cert will be verified. A CA_BUNDLE path can also be provided. Defaults to ``True``.  :param stream: (optional) if ``False``, the response content will be immediately downloaded.  :param cert: (optional) if String, path to ssl client cert file (.pem). If Tuple, ('cert', 'key') pair.  :return: :class:`Response <Response>` object  :rtype: requests.Response  Usage::   >>> import requests   >>> req = requests.request('GET', 'http://httpbin.org/get')   <Response [200]>  """

5. 參數示例

def param_method_url():  # requests.request(method='get', url='http://127.0.0.1:8000/test/')  # requests.request(method='post', url='http://127.0.0.1:8000/test/')  passdef param_param():  # - 可以是字典  # - 可以是字符串  # - 可以是字節(ascii編碼以內)  # requests.request(method='get',  # url='http://127.0.0.1:8000/test/',  # params={'k1': 'v1', 'k2': '水電費'})  # requests.request(method='get',  # url='http://127.0.0.1:8000/test/',  # params="k1=v1&k2=水電費&k3=v3&k3=vv3")  # requests.request(method='get',  # url='http://127.0.0.1:8000/test/',  # params=bytes("k1=v1&k2=k2&k3=v3&k3=vv3", encoding='utf8'))  # 錯誤  # requests.request(method='get',  # url='http://127.0.0.1:8000/test/',  # params=bytes("k1=v1&k2=水電費&k3=v3&k3=vv3", encoding='utf8'))  passdef param_data():  # 可以是字典  # 可以是字符串  # 可以是字節  # 可以是文件對象  # requests.request(method='POST',  # url='http://127.0.0.1:8000/test/',  # data={'k1': 'v1', 'k2': '水電費'})  # requests.request(method='POST',  # url='http://127.0.0.1:8000/test/',  # data="k1=v1; k2=v2; k3=v3; k3=v4"  # )  # requests.request(method='POST',  # url='http://127.0.0.1:8000/test/',  # data="k1=v1;k2=v2;k3=v3;k3=v4",  # headers={'Content-Type': 'application/x-www-form-urlencoded'}  # )  # requests.request(method='POST',  # url='http://127.0.0.1:8000/test/',  # data=open('data_file.py', mode='r', encoding='utf-8'), # 文件內容是:k1=v1;k2=v2;k3=v3;k3=v4  # headers={'Content-Type': 'application/x-www-form-urlencoded'}  # )  passdef param_json():  # 將json中對應的數據進行序列化成一個字符串,json.dumps(...)  # 然后發送到服務器端的body中,并且Content-Type是 {'Content-Type': 'application/json'}  requests.request(method='POST',           url='http://127.0.0.1:8000/test/',           json={'k1': 'v1', 'k2': '水電費'})def param_headers():  # 發送請求頭到服務器端  requests.request(method='POST',           url='http://127.0.0.1:8000/test/',           json={'k1': 'v1', 'k2': '水電費'},           headers={'Content-Type': 'application/x-www-form-urlencoded'}           )def param_cookies():  # 發送Cookie到服務器端  requests.request(method='POST',           url='http://127.0.0.1:8000/test/',           data={'k1': 'v1', 'k2': 'v2'},           cookies={'cook1': 'value1'},           )  # 也可以使用CookieJar(字典形式就是在此基礎上封裝)  from http.cookiejar import CookieJar  from http.cookiejar import Cookie  obj = CookieJar()  obj.set_cookie(Cookie(version=0, name='c1', value='v1', port=None, domain='', path='/', secure=False, expires=None,             discard=True, comment=None, comment_url=None, rest={'HttpOnly': None}, rfc2109=False,             port_specified=False, domain_specified=False, domain_initial_dot=False, path_specified=False)          )  requests.request(method='POST',           url='http://127.0.0.1:8000/test/',           data={'k1': 'v1', 'k2': 'v2'},           cookies=obj)def param_files():  # 發送文件  # file_dict = {  # 'f1': open('readme', 'rb')  # }  # requests.request(method='POST',  # url='http://127.0.0.1:8000/test/',  # files=file_dict)  # 發送文件,定制文件名  # file_dict = {  # 'f1': ('test.txt', open('readme', 'rb'))  # }  # requests.request(method='POST',  # url='http://127.0.0.1:8000/test/',  # files=file_dict)  # 發送文件,定制文件名  # file_dict = {  # 'f1': ('test.txt', "hahsfaksfa9kasdjflaksdjf")  # }  # requests.request(method='POST',  # url='http://127.0.0.1:8000/test/',  # files=file_dict)  # 發送文件,定制文件名  # file_dict = {  #   'f1': ('test.txt', "hahsfaksfa9kasdjflaksdjf", 'application/text', {'k1': '0'})  # }  # requests.request(method='POST',  #         url='http://127.0.0.1:8000/test/',  #         files=file_dict)  passdef param_auth():  from requests.auth import HTTPBasicAuth, HTTPDigestAuth  ret = requests.get('https://api.github.com/user', auth=HTTPBasicAuth('wupeiqi', 'sdfasdfasdf'))  print(ret.text)  # ret = requests.get('http://192.168.1.1',  # auth=HTTPBasicAuth('admin', 'admin'))  # ret.encoding = 'gbk'  # print(ret.text)  # ret = requests.get('http://httpbin.org/digest-auth/auth/user/pass', auth=HTTPDigestAuth('user', 'pass'))  # print(ret)  #def param_timeout():  # ret = requests.get('http://google.com/', timeout=1)  # print(ret)  # ret = requests.get('http://google.com/', timeout=(5, 1))  # print(ret)  passdef param_allow_redirects():  ret = requests.get('http://127.0.0.1:8000/test/', allow_redirects=False)  print(ret.text)def param_proxies():  # proxies = {  # "http": "61.172.249.96:80",  # "https": "http://61.185.219.126:3128",  # }  # proxies = {'http://10.20.1.128': 'http://10.10.1.10:5323'}  # ret = requests.get("http://www.proxy360.cn/Proxy", proxies=proxies)  # print(ret.headers)  # from requests.auth import HTTPProxyAuth  #  # proxyDict = {  # 'http': '77.75.105.165',  # 'https': '77.75.105.165'  # }  # auth = HTTPProxyAuth('username', 'mypassword')  #  # r = requests.get("http://www.google.com", proxies=proxyDict, auth=auth)  # print(r.text)  passdef param_stream():  ret = requests.get('http://127.0.0.1:8000/test/', stream=True)  print(ret.content)  ret.close()  # from contextlib import closing  # with closing(requests.get('http://httpbin.org/get', stream=True)) as r:  # # 在此處理響應。  # for i in r.iter_content():  # print(i)def requests_session():  import requests  session = requests.Session()  ### 1、首先登陸任何頁面,獲取cookie  i1 = session.get(url="http://dig.chouti.com/help/service")  ### 2、用戶登陸,攜帶上一次的cookie,后臺對cookie中的 gpsd 進行授權  i2 = session.post(    url="http://dig.chouti.com/login",    data={      'phone': "8615131255089",      'password': "xxxxxx",      'oneMonth': ""    }  )  i3 = session.post(    url="http://dig.chouti.com/link/vote?linksId=8589623",  )  print(i3.text)

6. requests模擬登陸GitHub

 import requests from bs4 import BeautifulSoup   def login_github():   """   通過requests模塊模擬瀏覽器登陸GitHub   :return:    """   # 獲取csrf_token   r1 = requests.get('https://github.com/login')  # 獲得get請求的對象   s1 = BeautifulSoup(r1.text, 'html.parser')   # 使用bs4解析HTML對象   token = s1.find('input', attrs={'name': 'authenticity_token'}).get('value')   # 獲取登陸授權碼,即csrf_token   get_cookies = r1.cookies.get_dict()   # 獲取get請求的cookies,post請求時必須攜帶      # 發送post登陸請求   '''   post登陸參數   commit  Sign+in   utf8  ?   authenticity_token  E961jQMIyC9NPwL54YPj70gv2hbXWJ…fTUd+e4lT5RAizKbfzQo4eRHsfg==   login  JackUpDown(用戶名)   password  **********(密碼)   '''   r2 = requests.post(     'https://github.com/session',     data={       'commit': 'Sign+in',       'utf8': '?',       'authenticity_token': token,       'login': 'JackUpDown',       'password': '**********'     },     cookies=get_cookies   # 攜帶get請求的cookies            )   login_cookies = r2.cookies.get_dict()  # 獲得登陸成功的cookies,攜帶此cookies就可以訪問任意GitHub頁面    # 攜帶post cookies跳轉任意頁面   r3 = requests.get('https://github.com/settings/emails', cookies=login_cookies)   print(r3.text)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 黄冈市| 阜宁县| 翼城县| 凉城县| 永宁县| 宁明县| 裕民县| 乳山市| 临沭县| 宁阳县| 康马县| 吴忠市| 阳春市| 梧州市| 微山县| 修水县| 宿松县| 任丘市| 凤庆县| 遂昌县| 剑河县| 华池县| 余干县| 安西县| 沙坪坝区| 瓦房店市| 民权县| 北宁市| 嫩江县| 博爱县| 平乐县| 涡阳县| 龙江县| 繁峙县| 玉田县| 温宿县| 灵石县| 武宣县| 石首市| 凤庆县| 和林格尔县|