Grundlegender Nutzungsleitfaden für die Anforderungsbibliothek (Senden von HTTP-Anfragen)

Überblick

Anfragen ist eine Python-Drittanbieterbibliothek zum Senden von HTTP-Anfragen. Es bietet eine einfache und bequeme Möglichkeit, mit Webdiensten zu interagieren, z. B. Webseiteninhalte abzurufen, Daten zu senden, Cookies zu verarbeiten usw.

  • Anfragen sind in Python geschrieben und prägnanter als das Modul urllib2
  • Anfragen unterstützen HTTP-Verbindungspersistenz und Verbindungspooling, die Verwendung von Cookies zur Aufrechterhaltung von Sitzungen, Datei-Upload, automatische Kodierung von Antwortinhalten, internationalisierte URLs und automatische Kodierung von POST-Daten.
  • Es ist hochgradig gekapselt und basiert auf den integrierten Modulen von Python, was Python bei Netzwerkanfragen benutzerfreundlich macht. Mit Requests können Sie alle Vorgänge, die der Browser ausführen kann, problemlos abschließen.
  • Anfragen implementieren automatisch eine dauerhafte Keep-Alive-Verbindung

fordert eine gemeinsame API an

Gängige Methoden

  • request(): Erstellen Sie eine Anfrage, unterstützen Sie GET, POST, PUT, DELETE usw. und geben Sie ein Antwortobjekt zurück

    Der erste Parameter ist standardmäßig method und der zweite Parameter ist standardmäßig url

  • get(): Senden Sie eine Get-Anfrage und geben Sie ein Antwortobjekt zurück

    Der erste Parameter ist standardmäßig die URL

    # 发送GET请求并获取响应内容
    response = requests.get("https://www.example.com")
    # 发送带参数的GET请求。字典传递参数,如果值为None的键不会被添加到url中
    params = {
          
          'key1': 'value1', 'key2': 'value2'}
    response = requests.get("https://www.example.com", params=params)
    
  • post(): Senden Sie eine Post-Anfrage und geben Sie ein Antwortobjekt zurück

    Der erste Parameter ist standardmäßig die URL

    import requests
    import json
    
    # 发送POST请求并传递数据
    data = {
          
          'key1': 'value1', 'key2': 'value2'}
    response = requests.post("https://www.example.com", data=data)
    # 发送JSON数据
    headers = {
          
          'Content-Type': 'application/json'}
    response = requests.post("https://www.example.com", data=json.dumps(data), headers=headers)
    
  • Session(): Holen Sie sich das Sitzungsobjekt. Möglichkeit, bestimmte Parameter über Anfragen hinweg beizubehalten

    „requests.get()“ oder „requests.post()“ sind alle einmalige Anfragen. Wenn Sie Parameter-Cookies oder Header übergeben müssen, müssen Sie Parameter für jede Anfrage übergeben.

    Wenn eine Sitzung zum Initiieren einer Anfrage verwendet wird, wird das vom Server der anderen Partei gesetzte lokale Cookie automatisch im Sitzungsobjekt gespeichert, nachdem die Sitzungsinstanz eine Website angefordert hat. Wenn die Sitzung das nächste Mal zum Anfordern des Servers der anderen Partei verwendet wird, Das vorherige Cookie wird direkt abgerufen, wodurch eine Konversationserhaltung erreicht wird.

    session = requests.Session()  # cookies或者session或者token保存于session对象中
    session.auth = ('auth','passwd')
    session.headers = {
          
          'key':'value'}
    response = session.get('url')
    

Häufig verwendete Parameter von Methoden

  • URL: Adresse anfordern. Der erste Parameter der Sendeanforderungsmethode ist standardmäßig die URL

  • Daten: Legen Sie den Anforderungstext fest, das Standardformat ist Wörterbuch

  • params: Abfrageparameter-Wörterbuch festlegen

  • Header: Legen Sie den Anforderungstext im Wörterbuchformat fest

  • Timeout: Legen Sie das Timeout in Sekunden fest, nur gültig für Verbindungen

    Sobald diese Zeit überschritten wird und der Antwortinhalt nicht abgerufen wird, wird ein Fehler angezeigt (eine Ausnahmebehandlung ist erforderlich).

    try:
    	res = requests.get(url = 'url',timeout=1)
    except exceptions.Timeout as e:
        print(e)
    except exceptions.HTTPError as e:
        print(e)
    
  • Cookies: Cookies setzen

  • Proxys: Zugriffs-Proxy festlegen. Die Paketerfassung kann über den Proxy eingerichtet werden

    proxies = requests.get('url', proxies={
          
          'http':'[协议:]ip1:端口','https':'[协议:]ip2:端口'})
    
    # 如果代理需要用户名和密码,则需要这样:
    proxies = {
          
          "http": "http://user:password@ip:端口", }
    
  • Dateien:Konfigurationsdokument-Senden

    files = {
          
          'file': open('report.xls', 'rb')}
    #files = {'file': ('report.jpg', open('report.xls', 'rb'))}     # 显式的设置文件名
    r = requests.post('http://m.ctrip.com', files=files)
    
  • auth: Authentifizierung einrichten

    import requests
    from requests.auth import HTTPBasicAuth
     
    resp = requests.get('url', auth=HTTPBasicAuth('user', 'passwd'))
    #resp = requests.get('url', auth=('user', 'passwd'))    # 简写
    #resp = requests.get(URL, auth=HTTPDigestAuth('user', 'pass')	# 摘要式身份认证
    

Anfragen.Response Common API

  • Gemeinsame Eigenschaften:

    • Kodierung: Aktuelle Kodierung abrufen

    • encoding = ‘utf-8’: Kodierung festlegen

    • text: Analysieren Sie den zurückgegebenen Inhalt in Codierung. Der Antworttext im String-Format wird automatisch entsprechend der Zeichenkodierung des Antwortheaders dekodiert.

    • content: Wird in Byteform (binär) zurückgegeben. Byte-Antworttext, GZIP- und Deflate-Komprimierung werden automatisch dekodiert.

    • headers: Verwenden Sie ein Wörterbuchobjekt, um Server-Antwortheader zu speichern, aber dieses Wörterbuch ist etwas Besonderes. Bei den Wörterbuchschlüsseln wird die Groß-/Kleinschreibung nicht beachtet. Wenn der Schlüssel nicht vorhanden ist, ist „Keine“ vorhanden zurückgegeben

    • status_code: Antwortstatuscode

    • raw: Gibt den ursprünglichen Antworttext zurück, der das Antwortobjekt von urllib ist. Verwenden Sie die Antwort .raw.read()

    • ok: Boolescher Wert, prüft, ob die http-Anfrage erfolgreich ist (Statuscode: 200)

    • Cookies:Cookie-Informationen

    • Verlauf:Antwortrichtungsinformationen

      Hinweis: Sie können bei der Anfrage „allow_redirects = false“ hinzufügen, um eine Umleitung zu verhindern

  • Spezielle Methoden:

    • json(): Der integrierte JSON-Decoder in Requests, zurückgegeben im JSON-Format

      Der zurückgegebene Inhalt muss im JSON-Format vorliegen, andernfalls wird bei einem Parsing-Fehler eine Ausnahme ausgelöst.

    • raise_for_status(): Fehlgeschlagene Anfrage (nicht 200-Antwort) löst Ausnahme aus


expandieren

Senden Sie eine https-Anfrage und ignorieren Sie die SSL-Zertifikatsüberprüfung

Einführung in https- und SSL-Zertifikate

  • HTTPS (HyperText Transfer Protocol Secure) ist ein sicheres Hypertext-Übertragungsprotokoll, das das HTTP-Protokoll und das SSL/TLS-Protokoll kombiniert. HTTPS verwendet die Protokolle SSL (Secure Sockets Layer) oder TLS (Transport Layer Security), um die Übertragung von Kommunikationsdaten zu verschlüsseln und zu schützen. SSL und TLS dienen dem Aufbau verschlüsselter Verbindungen und dem Schutz der Sicherheit und Integrität der Datenübertragung.

  • Die Beziehung und der Workflow von HTTPS- und SSL-Zertifikaten:

    1. Stellen Sie eine sichere Verbindung her: Wenn der Client eine HTTPS-Anfrage initiiert, stellen Client und Server zunächst eine sichere Verbindung her.
    2. Handshake-Prozess: Diese Verbindung wird über den SSL/TLS-Handshake-Prozess hergestellt. Dabei sendet der Server sein eigenes SSL-Zertifikat an den Client.
    3. Zertifikatsüberprüfung: Nachdem der Client das SSL-Zertifikat des Servers erhalten hat, überprüft er die Gültigkeit des Zertifikats, einschließlich der Überprüfung, ob die Signatur des Zertifikats gültig ist, ob es abgelaufen ist, ob es mit dem angeforderten Domänennamen übereinstimmt usw.
    4. Schlüsselaustausch: Der Client und der Server handeln Verschlüsselungsalgorithmen und Schlüssel über den SSL/TLS-Handshake-Prozess aus, um einen verschlüsselten Kanal einzurichten.
    5. Verschlüsselte Kommunikation: Sobald der verschlüsselte Kanal eingerichtet ist, wird die Datenübertragung zwischen dem Client und dem Server durch den ausgewählten Verschlüsselungsalgorithmus verschlüsselt, um die Sicherheit der Kommunikation zu gewährleisten.

    Dabei spielt das SSL-Zertifikat eine Schlüsselrolle, da es zur Überprüfung der Identität des Servers und zur Festlegung der Verschlüsselungsparameter des verschlüsselten Kanals dient. Das SSL-Zertifikat des Servers wird von einer vertrauenswürdigen Drittanbieter-Autorität (CA) ausgestellt und Clients vertrauen diesen CAs, um die Identität des Servers zu überprüfen.

    Um die HTTPS-Kommunikation zu implementieren, müssen Sie ein SSL-Zertifikat bei einer vertrauenswürdigen Zertifizierungsstelle beantragen und es auf dem Server installieren. Wenn Clients eine Website über HTTPS anfordern, überprüfen sie das SSL-Zertifikat des Servers und stellen sicher, dass die Verbindung sicher ist.


Anfragen sendet https-Anfragen und ignoriert die SSL-Zertifikatsüberprüfung

  • In einigen Fällen kann es erforderlich sein, die SSL-Zertifikatsüberprüfung zu ignorieren, wenn HTTPS-Anfragen mit requests gesendet werden, beispielsweise im Fall einer Testumgebung oder eines selbstsignierten Zertifikats.

    Sie können die SSL-Zertifikatsüberprüfung ignorieren, indem Sie den Parameter verify auf False setzen.

    Beachten:

    • Der SSL/TLS-Handshake findet auch dann noch statt, wenn der Parameter auf gesetzt ist, wenn die Anfrage mit requests . verifyFalse

      verify=False weist requests lediglich an, die SSL-Zertifikatsüberprüfung zu überspringen, ohne den SSL/TLS-Handshake-Prozess zu deaktivieren.

    • Der SSL/TLS-Handshake ist ein entscheidender Schritt beim Aufbau einer sicheren Verbindung und wird zum Aushandeln von Verschlüsselungsalgorithmen, zum Austausch von Schlüsseln und zum Aufbau verschlüsselter Kanäle verwendet.

      Auch wenn das SSL-Zertifikat des Servers nicht überprüft wird (mit verify=False), ist dennoch ein SSL/TLS-Handshake erforderlich, um die Sicherheit der Kommunikation zu gewährleisten.

    • Bei Verwendung von verify=False findet der SSL/TLS-Handshake statt, aber die Überprüfung des SSL-Zertifikats des Servers wird während des Handshakes übersprungen. Dies bedeutet, dass der Handshake auch dann fortgesetzt wird, wenn das Zertifikat des Servers ungültig oder abgelaufen ist, die Verbindung jedoch möglicherweise nicht sicher ist, da keine Garantie dafür besteht, dass Sie eine Verbindung zum richtigen Server herstellen.

    • Wenn Sie den SSL/TLS-Handshake vollständig überspringen und keine sichere Verbindung herstellen möchten, sollten Sie die direkte Verwendung einer einfachen HTTP-Verbindung anstelle von HTTPS in Betracht ziehen.

      Allerdings wird dadurch die Kommunikation unsicher und der Einsatz in Produktionsumgebungen wird nicht empfohlen. Wenn eine sichere Verbindung erforderlich ist, wird empfohlen, ein legales und gültiges SSL-Zertifikat zu verwenden und den SSL/TLS-Handshake-Prozess zuzulassen, um die Sicherheit der Verbindung zu gewährleisten.

  • [SSL: DH_KEY_TOO_SMALL] dh-Schlüssel zu klein Fehler

    Das Problem, dass die DH-Schlüssellänge (Diffie-Hellman, Schlüsselaustauschprotokoll/-algorithmus) zu klein ist, kann während des SSL/TLS-Handshakes auftreten. Dies wird normalerweise durch die Verwendung einer zu kleinen DH-Schlüssellänge oder einen unsicheren DH-Schlüsselaustauschalgorithmus verursacht.

    Im neuen SSL/TLS-Standard ist die Verwendung sicherer Schlüssellängen und Verschlüsselungsalgorithmen vorgeschrieben, um die Sicherheit der Kommunikation zu gewährleisten. Einige alte, unsichere Verschlüsselungsalgorithmen oder Schlüssellängen werden als unsicher markiert und verursachen daher ähnliche Fehler.

    **Lösung:** Legen Sie in der Anfrage geeignete Verschlüsselungen fest, um Verschlüsselungssammlungen mit einer zu kleinen DH-Schlüssellänge auszuschließen. Dies ist jedoch keine sichere Lösung, da dadurch die Sicherheit der Kommunikation verringert wird.

    • Methode 1: Verwenden Sie ssl_default_context, um zulässige Verschlüsselungsalgorithmen anzugeben

      import requests
      import ssl
      
      url = 'https://example.com'  # 替换为你要请求的 HTTPS URL
      # 禁用 SSL 校验
      ssl_context = ssl.create_default_context()
      ssl_context.check_hostname = False
      ssl_context.verify_mode = ssl.CERT_NONE
      # 指定允许的加密算法
      ciphers = 'HIGH:!DH:!aNULL'
      ssl_context.set_ciphers(ciphers)
      # 忽略警告
      urllib3.disable_warnings()
      # 发送 HTTPS 请求
      response = requests.get(url, verify=ssl_context)
      
    • Methode 2: Verwenden Sie das Paket „requests.packages.urllib3“, um die zulässigen Verschlüsselungsalgorithmen anzugeben

      Sie können das Paket „requests.packages.urllib3“ verwenden, um SSL-bezogene Funktionen zu verwalten. In diesem Fall können Sie die Konstante DEFAULT_CIPHERS verwenden, um den Standardverschlüsselungsalgorithmus festzulegen.

      Hinweis: Die statische Kompilierung von „requests.packages.urllib3“ zeigt möglicherweise an, dass es nicht gefunden werden kann. Ignorieren Sie es einfach, da es möglicherweise dynamisch geladen wird.

      import requests
      
      url = 'https://example.com'  # 替换为你要请求的 HTTPS URL
      # 设置默认加密算法为 HIGH:!DH:!aNULL。
      requests.packages.urllib3.util.ssl_.DEFAULT_CIPHERS += ':HIGH:!DH:!aNULL'
      # 忽略警告
      requests.packages.urllib3.disable_warnings()
      # 发送 HTTPS 请求
      response = requests.get(url, verify=False)
      

Guess you like

Origin blog.csdn.net/footless_bird/article/details/134111962