3-要求ネットワーク要求

3、Requests-ネットワーク要求

urllibはPythonで書かれた要求基づいている言語
全体的な機能のデモ

import requests

response  = requests.get("https://www.baidu.com")
print(type(response))     <class 'requests.models.Response'>
print(response.status_code)
print(type(response.text))
print(response.text)  字符串
print(response.cookies)
print(response.content) 二进制
print(response.content.decode("utf-8"))  字符串

注:
問題が発生した場合、Webサイトを直接response.text化け、使用response.contentは、データフォーマットはバイナリ形式で返され、その後、デコード()response.text直接バック文字化け問題が解決され、UTF-8に変換します。

要求が行われた後、リクエストは、符号化されたHTTPレスポンスヘッダに基づいて推測を行います。あなたがresponse.textにアクセスすると、要求は、その推定されるテキストエンコーディングを使用します。あなたは、エンコード要求を使用するように何かを見つけることができ、そしてそれを変更するresponse.encodingプロパティを使用することができます。

response =requests.get("http://www.baidu.com")
response.encoding="utf-8"
print(response.text)

かどうかresponse.content.decode(スルー「UTF-8)または方法によってresponse.encoding =」UTF-8「ファッションは、問題を回避することができます文字化け

自動検出エンコーディング

pip  install chardet
response =requests.get("http://www.baidu.com")
response.encoding=chardet.detect(response.content)['encoding']    直接获取全部响应
print(response.text)

另外一种流模式
response =requests.get("http://www.baidu.com", stream=True)
response.raw.read(10

リクエストメソッド

import requests
requests.post("http://httpbin.org/post")
requests.put("http://httpbin.org/put")
requests.delete("http://httpbin.org/delete")
requests.head("http://httpbin.org/get")
requests.options("http://httpbin.org/get")

1.リクエストメソッドの
パラメータを持つGETリクエスト

import requests

response = requests.get("http://httpbin.org/get?name=zhaofan&age=23")
print(response.text)

2は、データを渡すためにURLのクエリ文字列に
我々は通常、httpbin.org/get?key=val道を通過するであろう。要求モジュールはのparamsは、辞書にこれらのパラメータを渡すためにパラメータを渡すことができますキーワード

import requests
data = {
    "name":"zhaofan",
    "age":22
}
response = requests.get("http://httpbin.org/get",params=data)
print(response.url)
print(response.text)

解析JSON

import requests
import json

response = requests.get("http://httpbin.org/get")
print(type(response.text))
print(response.json())
print(json.loads(response.text))
print(type(response.json()))

ヘッダを追加します。

import requests
headers = {

    "User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36"
}
response =requests.get("https://www.zhihu.com",headers=headers)

print(response.text)

基本的なPOSTリクエスト

import requests

data = {
    "name":"zhaofan",
    "age":23
}
response = requests.post("http://httpbin.org/post",data=data)
print(response.text)

応答

import requests

response = requests.get("http://www.baidu.com")
print(type(response.status_code),response.status_code)
print(type(response.headers),response.headers)      response.headers.get('content-type')
print(type(response.cookies),response.cookies)
print(type(response.url),response.url)
print(type(response.history),response.history)   

ステータスコード

100:( '続ける')、
101:( 'switching_protocols'、)、
102( '処理')、
103( 'チェックポイント')、
122:( 'uri_too_long'、 'request_uri_too_long')、
200: ( 'OK'、 '大丈夫'、 'all_ok'、 'all_okay'、 'all_good'、 '\ O /'、 '✓')、
201:( '作成'、)、
202:( '受け入れ'、)、
203:( 'non_authoritative_info'、 'non_authoritative_information')、
204:( 'NO_CONTENT'、)、
205:( 'reset_content'、 'リセット')、
206:( 'partial_content'、 '部分的')、
207:( 'multi_status ' 'multiple_status'、 'multi_stati'、 'multiple_stati')、
208:('already_reported」、)、
226:( '' im_used、)、

リダイレクション。
300:( 'multiple_choices'、)、
301:( 'moved_permanently'、 '移動'、 '\ O-')、
302:( '見出さ')、
303:( 'see_other' 'その他')、
304: ( 'not_modified')、
305:( 'use_proxy'、)、
306:( 'switch_proxy')、
307:( 'temporary_redirect'は、 'temporary_moved'、 '一時')、
308:( 'permanent_redirect'、
「resume_incomplete 」、 '履歴書'、)、#これらの2は3.0で削除されます

クライアントエラー。
400:( 'bad_request'、 '悪い')、
401( '不正')、
402:( 'payment_required'、 '支払い')、
403:( '禁止'、)、
404:( 'NOT_FOUND'、 ' -O- ')、
405:(' ')「、' not_allowed METHOD_NOT_ALLOWED
406:( 'not_acceptable'、)、
407:( 'proxy_authentication_required'、 'proxy_auth'、 'proxy_authentication')、
408:( 'REQUEST_TIMEOUT'、 'タイムアウト')、
409:( '衝突'、)、
410( 'ゴーン'、)、
411:( 'length_required'、)、
412:( 'precondition_failed'、 '前提条件')、
413:( 'request_entity_too_large' 、)、
414:(」

416:( 'requested_range_not_satisfiable'、 'requested_range'、 'range_not_satisfiable')、
417:( 'expectation_failed'、)、
418:( 'im_a_teapot'、 'ティーポット'、 'i_am_a_teapot')、
421:( 'misdirected_request'、)、
422:( 'unprocessable_entity'、 '処理不可能')、
423( 'ロック')、
424:( 'failed_dependency'、 '依存')、
425:( 'unordered_collection'、 '順不同')、
426:( 'upgrade_required 」、 'アップグレード')、
428:( 'precondition_required'、 '前提条件')、
429:( 'too_many_requests'、 'too_many')、
431:( 'header_fields_too_large'、 'fields_too_large')、
444:( 'NO_RESPONSE'、 'なし')、
449:( 'retry_with'、 '再試行')、
450:( 'blocked_by_windows_parental_controls'、 'parental_controls')、
451:( 'unavailable_for_legal_reasons'、 'legal_reasons')、
499:( 'client_closed_request'、)、

サーバーエラー。
500:( 'INTERNAL_SERVER_ERROR'、 'SERVER_ERROR'、 '/ O'、 '✗')、
501:( 'NOT_IMPLEMENTED')、
502:( 'BAD_GATEWAY'、)、
503:( 'service_unavailable'、 '利用できません') 、
504:( 'gateway_timeout'、)、
505:( 'http_version_not_supported'、 'http_version')、
506:( 'variant_also_negotiates')、
507:( 'insufficient_storage'、)、
509:( 'bandwidth_limit_exceeded'、 '帯域幅' )、
510:( 'not_extended'、)、
511:( 'network_authentication_required'、 'network_auth'、 'network_authentication')

import requests

response= requests.get("http://www.baidu.com")
if response.status_code == requests.codes.ok:
    print("访问成功")

クッキーの取得

import requests

response = requests.get("http://www.baidu.com")
print(response.cookies)

for key,value in response.cookies.items():
    print(key+"="+value)
    
    
##
for cookie in response.cookie.keys()
    print(response.cookies.get(cookie))
    
##自定义cookie
cookies = dict(name='qiye', age='10')
response = requests.get("http://www.baidu.com",cookies=cookies)

セッション遺跡

import requests
s = requests.Session()
s.get("http://httpbin.org/cookies/set/number/123456")
response = s.get("http://httpbin.org/cookies")
print(response.text)

datas={'name':'hhh', 'password':'xxxx'}
r=s.post(url,data=datas)

証明書の検証

import requests
from requests.packages import urllib3
urllib3.disable_warnings()
response = requests.get("https://www.12306.cn",verify=False)
print(response.status_code)

プロキシ設定

import requests

proxies= {
    "http":"http://127.0.0.1:9999",
    "https":"http://127.0.0.1:8888"
}
response  = requests.get("https://www.baidu.com",proxies=proxies)
print(response.text)
#### 或通过环境变量配置
HTTP_PROXY   HTTPS_PROXY 


##设置账号和密码
proxies = {
"http":"http://user:[email protected]:9999"
}

## 通过sokces
## pip install "requests[socks]"
proxies= {
"http":"socks5://127.0.0.1:9999",
"https":"sockes5://127.0.0.1:8888"
}

タイムアウト設定

あなたはタイムアウトパラメータのタイムアウトによって提供されてもよいです

r= request.get(url,timeout=2)

認証

認証が必要なサイトは、requests.authモジュールによって達成することができます

import requests

from requests.auth import HTTPBasicAuth

response = requests.get("http://120.27.34.24:9001/",auth=HTTPBasicAuth("user","123"))
print(response.status_code)



##另一种方式
import requests

response = requests.get("http://120.27.34.24:9001/",auth=("user","123"))
print(response.status_code)

例外処理

ここreqeustsについて異常なあなたは、詳細を見ることができます:
http://www.python-requests.org/en/master/api/#exceptionsすべての例外はrequests.excepitonsであります

私たちは、ソースRequestException継承例外IOError、から見ることができます
HTTPError、ConnectionError、タイムアウト継承RequestionException
ProxyError、SSLError継承ConnectionError
ReadTimeout継承された異常のタイムアウト

例外の順序をキャッチ

import requests

from requests.exceptions import ReadTimeout,ConnectionError,RequestException


try:
    response = requests.get("http://httpbin.org/get",timout=0.1)
    print(response.status_code)
except ReadTimeout:
    print("timeout")
except ConnectionError:
    print("connection Error")
except RequestException:
    print("error")

まず、タイムアウト例外が早く、最後の缶はまたRequestExctptionによって捕獲され捕捉されない場合は、異常、ネットワークは長距離キャプチャConnectionErrorを破られると、捕獲されました

おすすめ

転載: www.cnblogs.com/g2thend/p/12452178.html