Frage

Ich versuche zu überprüfen, die das Ziel stellt eine https-web-service.Ich habe code, um eine Verbindung über HTTP, aber ich bin mir nicht sicher, wie die Verbindung über HTTPS.Ich habe gelesen, Sie SSL verwenden, aber ich habe auch gelesen, dass es nicht unterstützt Zertifikat Fehler.Der code, den ich habe, ist aus der python-Dokumentation:

import httplib
conn = httplib.HTTPConnection("www.python.org")
conn.request("GET", "/index.html")
r1 = conn.getresponse()
print r1.status, r1.reason

Weiß jemand, wie man die Verbindung zu HTTPS?

Ich habe bereits versucht, die HTTPSConenction aber es antwortet mit einem Fehler-code fordern httplib nicht Attribut HTTPSConnection.Ich auch nicht-socket.ssl verfügbar.

Ich habe installiert Python 2.6.4 und ich glaube nicht, dass Sie die SSL-Unterstützung kompiliert werden.Gibt es eine Möglichkeit, zu integrieren suppot in die neuere python-zimmerreserviereung, ohne das Sie installieren es wieder.

Ich habe OpenSSL installiert und pyOpenSsl und ich habe versucht, den folgenden code aus einer der Antworten:

import urllib2
from OpenSSL import SSL
try: 
    response = urllib2.urlopen('https://example.com')  
    print 'response headers: "%s"' % response.info() 
except IOError, e: 
    if hasattr(e, 'code'): # HTTPError 
        print 'http error code: ', e.code 
    elif hasattr(e, 'reason'): # URLError 
        print "can't connect, reason: ", e.reason 
    else: 
        raise

Ich habe einen Fehler:

    Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
  File "/home/build/workspace/downloads/Python-2.6.4/Lib/urllib.py", line 87, in urlopen
    return opener.open(url)
  File "/home/build/workspace/downloads/Python-2.6.4/Lib/urllib.py", line 203, in open
    return self.open_unknown(fullurl, data)
  File "/home/build/workspace/downloads/Python-2.6.4/Lib/urllib.py", line 215, in open_unknown
    raise IOError, ('url error', 'unknown url type', type)
IOError: [Errno url error] unknown url type: 'https'

Weiß jemand, wie dies funktioniert?

-- UPDATE

Ich habe herausgefunden, was das problem war, dass die Python-version nutze ich nicht haben die Unterstützung für SSL.Ich fand diese Lösung derzeit: http://www.webtop.com.au/compiling-python-with-ssl-support.

Der code funktioniert jetzt auch nach dieser Lösung, die ist sehr gut.Wenn ich importieren Sie ssl-und HTTPSConnection ich weiß nicht, bekomme eine Fehlermeldung.

Vielen Dank für die Hilfe aller.

War es hilfreich?

Lösung

Python 2.x: docs.python.org/2/library/httplib.html:

Hinweis:HTTPS-Unterstützung ist nur verfügbar, wenn die socket-Modul kompiliert wurde mit SSL-Unterstützung.

Python-3.x: docs.python.org/3/library/http.client.html:

Hinweis: HTTPS-Unterstützung ist nur verfügbar, wenn Python kompiliert wurde, mit SSL-Unterstützung (durch das ssl-Modul).

#!/usr/bin/env python

import httplib
c = httplib.HTTPSConnection("ccc.de")
c.request("GET", "/")
response = c.getresponse()
print response.status, response.reason
data = response.read()
print data
# => 
# 200 OK
# <!DOCTYPE html ....

Um zu überprüfen, ob SSL aktiviert ist, versuchen Sie:

>>> import socket
>>> socket.ssl
<function ssl at 0x4038b0>

Andere Tipps

Überprüfen ssl-Unterstützung in Python 2.6+:

try:
    import ssl
except ImportError:
    print "error: no ssl support"

Stellen Sie eine Verbindung über https:

import urllib2

try:
    response = urllib2.urlopen('https://example.com') 
    print 'response headers: "%s"' % response.info()
except IOError, e:
    if hasattr(e, 'code'): # HTTPError
        print 'http error code: ', e.code
    elif hasattr(e, 'reason'): # URLError
        print "can't connect, reason: ", e.reason
    else:
        raise
import requests
r = requests.get("https://stackoverflow.com") 
data = r.content  # Content of response

print r.status_code  # Status code of response
print data

Warum haben Sie nicht versucht, httplib.HTTPSConnection?Es nicht, die SSL-überprüfung, aber dies ist nicht erforderlich, eine Verbindung über https.Ihr code funktioniert mit https-Verbindung:

>>> import httplib
>>> conn = httplib.HTTPSConnection("mail.google.com")
>>> conn.request("GET", "/")
>>> r1 = conn.getresponse()
>>> print r1.status, r1.reason
200 OK

Wenn Sie mit httplib.HTTPSConnection:

Bitte werfen Sie einen Blick auf:Änderungen in version 2.7.9:

Diese Klasse führt nun alle notwendigen Zertifikat und den Hostnamen überprüft standardmäßig.Zur Wiederherstellung der vorherigen, nicht überprüfte, Verhalten ssl._create_unverified_context() übergeben werden kann, um die context-parameter.Sie können verwenden:

if hasattr(ssl, '_create_unverified_context'):
            ssl._create_default_https_context = ssl._create_unverified_context

Vorausgesetzt, die SSL-Unterstützung aktiviert ist, für die socket Modul.

connection1 = httplib.HTTPSConnection('www.somesecuresite.com')

Ich hatte einige code, der wurde nicht mit einer HTTPConnection (MOVED_PERMANENTLY error),, aber sobald ich eingeschaltet, um HTTPS es funktionierte wieder einwandfrei ohne andere änderungen erforderlich.Das ist eine sehr einfache Lösung!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top