2017-11-20 1 views
0

Ich versuche, Curls Entsprechung in meinem Python-Code zu schreiben.CURLs Entsprechung in Python

curl -i -u username:password -H "Content-Type: application/json;charset=utf-8" -X POST -d '{"id_no":"7877"}' https://host/XXXX/ -k 

Wo, ich habe Benutzername, Passwort und Host-Details mit mir.

Mein Python-Code ist wie folgt:

headers = {'Content-Type': 'application/json;charset=utf-8'} 
parameter = {'id_no': 7877} 
p_response = requests.post(url,auth=('username', 'password'), headers=headers,params=parameter) 

Allerdings bin ich unten Fehler bekommen:

requests.exceptions.SSLError: HTTPSConnectionPool(host='host', port=443): Max retries exceeded with url: /id_no/?id_no=7877 (Caused by SSLError(SSLError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:748)'),)) 

Kann mir jemand die Änderungen vorschlagen?

Antwort

1

Sie haben das Flag -k im Befehl curl verwendet (der besagt, dass SSL nicht verifiziert werden soll), aber Sie haben den entsprechenden Kwarg für requests.post bereitgestellt.

Verwenden Sie verify=False.

Auch da Sie die -d Flagge mit curl verwendet, müssen Sie die entsprechenden data kwarg mit requests verwenden.

p_response = requests.post(url, auth=('username', 'password'), 
          headers=headers, data=parameter, 
#           ^
          verify=False) 
#      ^

curl docs:

-k, --insecure

(TLS) By default, every SSL connection curl makes is verified to be secure. This option allows curl to proceed and operate even for server connections otherwise considered insecure.

The server connection is verified by making sure the server's certificate contains the right name and verifies successfully using the cert store.

See this online resource for further details: https://curl.haxx.se/docs/sslcerts.html

See also --proxy-insecure and --cacert.

requests docs:

Requests can also ignore verifying the SSL certificate if you set verify to False:

+0

, die mir geholfen von SSL Problem loszuwerden, aber jetzt bin ich immer „InsecureRequestWarning: Ungeprüfte HTTPS-Anforderung gemacht wird. Es wird dringend empfohlen, eine Zertifikatsprüfung hinzuzufügen, siehe: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings "Fehler. Aber wenn ich den Server mit curl betrete, bekomme ich eine angemessene Antwort. Irgendeine Idee? – Sumit

+0

@Summe "Anfragen" ist ** Warnung ** Sie, weil Sie 'https' verwenden, aber das SSL-Zertifikat nicht überprüfen. Sie erhalten immer noch eine "richtige" Antwort. 'curl' könnte eine Warnung ausgeben, wenn die '-k'-Flagge verwendet wird, aber nicht gewählt wird. Es sagt nichts über die Antwort aus. – DeepSpace

+0

Auch wenn ich die Warnung ignoriere, ist die Antwort "Antwort 400" von Python. Aber CURL gibt mir aktuelle Daten. Ich habe urllib3.disable_warnings (urllib3.exceptions.InsecureRequestWarning) verwendet, um die Warnung zu unterdrücken. Irgendeine Idee, was könnte das Problem sein? – Sumit