

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Publier via HTTPS
<a name="http"></a>

Les clients peuvent publier des messages en adressant des demandes à l'API REST à l'aide des protocoles HTTP 1.0 ou 1.1. Pour connaître l'authentification et les mappages de port utilisés par les demandes HTTP, veuillez consulter [Protocols, port mappings, and authentication (Protocoles, mappages de ports et authentification)](protocols.md#protocol-mapping).

**Note**  
HTTPS ne prend pas en charge une valeur `clientId` comme le fait MQTT. `clientId` est disponible lors de l'utilisation de MQTT, mais pas disponible lors de l'utilisation de HTTPS.

## URL du message HTTPS
<a name="httpurl"></a>

Les appareils et les clients publient leurs messages en envoyant des requêtes POST à un point de terminaison spécifique au client et à une URL spécifique au sujet :

```
https://IoT_data_endpoint/topics/url_encoded_topic_name?qos=1
```
+  *IoT\$1data\$1endpoint*est le point de [terminaison des données de l'AWS IoT appareil](iot-connect-devices.md#iot-connect-device-endpoints). Vous pouvez trouver le point de terminaison dans la AWS IoT console sur la page de détails de l'objet ou sur le client à l'aide de la AWS CLI commande : 

  ```
  aws iot describe-endpoint --endpoint-type iot:Data-ATS
  ```

   Le point de terminaison doit ressembler à ceci : `a3qjEXAMPLEffp-ats.iot.us-west-2.amazonaws.com` 
+ *url\$1encoded\$1topic\$1name*est le [nom complet du sujet](topics.md#topicnames) du message envoyé.

## Exemples de code de message HTTPS
<a name="codeexample"></a>

Voici comment envoyer un message HTTPS à AWS IoT.

------
#### [ Python (port 8443) ]

```
import requests
import argparse

# define command-line parameters
parser = argparse.ArgumentParser(description="Send messages through an HTTPS connection.")
parser.add_argument('--endpoint', required=True, help="Your AWS IoT data custom endpoint, not including a port. " +
                                                      "Ex: \"abcdEXAMPLExyz-ats.iot.us-east-1.amazonaws.com\"")
parser.add_argument('--cert', required=True, help="File path to your client certificate, in PEM format.")
parser.add_argument('--key', required=True, help="File path to your private key, in PEM format.")
parser.add_argument('--topic', required=True, default="test/topic", help="Topic to publish messages to.")
parser.add_argument('--message', default="Hello World!", help="Message to publish. " +
                                                      "Specify empty string to publish nothing.")

# parse and load command-line parameter values
args = parser.parse_args()

# create and format values for HTTPS request
publish_url = 'https://' + args.endpoint + ':8443/topics/' + args.topic + '?qos=1'
publish_msg = args.message.encode('utf-8')

# make request
publish = requests.request('POST',
            publish_url,
            data=publish_msg,
            cert=[args.cert, args.key])

# print results
print("Response status: ", str(publish.status_code))
if publish.status_code == 200:
        print("Response body:", publish.text)
```

------
#### [ Python (port 443) ]

```
import requests
import http.client
import json
import ssl

ssl_context = ssl.SSLContext(protocol=ssl.PROTOCOL_TLS_CLIENT)
ssl_context.minimum_version = ssl.TLSVersion.TLSv1_2

# note the use of ALPN
ssl_context.set_alpn_protocols(["x-amzn-http-ca"])
ssl_context.load_verify_locations(cafile="./<root_certificate>")

# update the certificate and the AWS endpoint
ssl_context.load_cert_chain("./<certificate_in_PEM_Format>", "<private_key_in_PEM_format>")
connection = http.client.HTTPSConnection('<the ats IoT endpoint>', 443, context=ssl_context)
message = {'data': 'Hello, I'm using TLS Client authentication!'}
json_data = json.dumps(message)
connection.request('POST', '/topics/device%2Fmessage?qos=1', json_data)

# make request
response = connection.getresponse()

# print results
print(response.read().decode())
```

------
#### [ CURL ]

Vous pouvez utiliser [curl](https://curl.haxx.se) à partir d'un client ou d'un appareil pour envoyer un message à AWS IoT.

**Pour utiliser curl pour envoyer un message depuis un appareil AWS IoT client**

1. Vérifiez la version **curl**.

   1. Sur votre client, exécutez cette commande à partir d’une invite de commande.

      **curl --help**

      Dans le texte d'aide, recherchez les options TLS. Vous devriez voir l'option `--tlsv1.2`.

   1. Si vous voyez l' option `--tlsv1.2`, continuez.

   1. Si vous ne voyez pas l'option `--tlsv1.2` ou si vous obtenez une erreur `command not found`, vous devrez peut-être mettre à jour ou installer curl sur votre client ou l'installer `openssl`avant de continuer.

1. Installez les certificats sur votre client.

   Copiez les fichiers de certificat que vous avez créés lorsque vous avez enregistré votre client (objet) dans la AWS IoT console. Assurez-vous d'avoir ces trois fichiers de certificat sur votre client avant de continuer.
   + Fichier de certificat de l'autorité de certification (*Amazon-root-CA-1.pem* dans cet exemple).
   + Fichier de certificat du client (*device.pem.crt* dans cet exemple).
   + Fichier de clé privée du client (*private.pem.key* dans cet exemple).

1. Créez la ligne de commande **curl** en remplaçant les valeurs remplaçables par celles de votre compte et de votre système.

   ```
   curl --tlsv1.2 \
       --cacert Amazon-root-CA-1.pem \
       --cert device.pem.crt \
       --key private.pem.key \
       --request POST \
       --data "{ \"message\": \"Hello, world\" }" \
       "https://IoT_data_endpoint:8443/topics/topic?qos=1"
   ```  
--tlsv1.2  
Utilisez TLS 1.2 (SSL).  
--caceret *Amazon-root-CA-1.pem*  
Nom et chemin d’accès du fichier de certificat d'autorité de certification, si nécessaire, pour vérifier l'appairage.  
--certificat *device.pem.crt*  
Nom et chemin d’accès du fichier de certificat du client, si nécessaire.  
--clé *private.pem.key*  
Nom et chemin d’accès du fichier de clé privée du client, si nécessaire.  
--demande POST  
Type de demande HTTP (dans le cas présent, POST).  
--données « » *\$1 \$1"message\$1": \$1"Hello, world\$1" \$1*  
Données POST HTTP que vous souhaitez publier. Dans ce cas, il s'agit d'une chaîne JSON, avec les guillemets internes échappés à l’aide du caractère de barre oblique inverse (\$1).  
« https : *IoT\$1data\$1endpoint* //:8443/sujets/ ? *topic* qos=1 »  
L'URL du point de terminaison des données de l' AWS IoT appareil de votre client`:8443`, suivie du port HTTPS, qui est ensuite suivi du mot clé `/topics/` et du nom du sujet`topic`, dans ce cas. Spécifiez la qualité du service en tant que paramètre de requête, `?qos=1`.

1. Ouvrez le client de test MQTT dans la AWS IoT console.

   Suivez les instructions [Afficher les messages MQTT avec le client AWS IoT MQTT](view-mqtt-messages.md) et configurez la console pour vous abonner aux messages dont le nom de sujet est *topic* utilisé dans votre **curl** commande, ou utilisez le filtre de sujet générique de`#`.

1. Testez la commande.

   Lors de la surveillance de la rubrique dans le client de test de la console AWS IoT , accédez à votre client et émettez la ligne de commande curl que vous avez créée à l'étape 3. Vous devriez voir les messages de votre client dans la console.

------