web-dev-qa-db-fra.com

Comment faire une requête HTTP depuis SSIS?

Je souhaite savoir comment effectuer un appel HTTP à partir de SSIS. Par exemple, j'aimerais pouvoir télécharger un fichier depuis http://www.domain.com/resource.Zip et enregistrez la date et l'heure du téléchargement et la destination du fichier sur le lecteur. Je voudrais également capturer des attributs tels que la taille du fichier et capturer la date et l'heure de fin du téléchargement.

30
tap

Vous pouvez utiliser l'espace de noms System.Net.WebClient pour effectuer la demande Http à l'aide de Script Task dans SSIS. L'exemple suivant montre comment cela peut être réalisé. L'exemple a été créé dans SSIS 2008 R2.

Processus étape par étape:

  1. Créez un nouveau package SSIS et créez deux variables à savoir RemoteUri et LocalFolder. Définissez la variable RemoteUri avec la valeur http://www.google.com/intl/en_com/images/srpr/logo1w.png. il s'agit de l'url de l'image du logo sur la page d'accueil de Google. Définissez la variable LocalFolder avec la valeur C:\temp\. c'est le chemin où nous allons enregistrer le contenu. Reportez-vous à la capture d'écran # 1.

  2. Sur le package SSIS, placez un Script Task. Remplacez la méthode Main () dans la tâche de script par le code fourni dans la section Script Task Code. Reportez-vous à la capture d'écran # 2.

  3. La capture d'écran # montre que le chemin C:\temp\ est vide.

  4. La capture d'écran # 4 montre une exécution réussie du paquet.

  5. La capture d'écran # 5 montre que le contenu (dans ce cas, l'image du logo) a été téléchargé sur le chemin du dossier local.

  6. La capture d'écran # 6 montre que le code a été testé pour télécharger un fichier .Zip. Pour ce faire, la valeur de la variable RemoteUri a été modifiée avec l'URL de contenu à télécharger.

Code de tâche de script:

C # code utilisable uniquement dans SSIS 2008 and above.

public void Main()
{
    Variables varCollection = null;

    Dts.VariableDispenser.LockForRead("User::RemoteUri");
    Dts.VariableDispenser.LockForRead("User::LocalFolder");
    Dts.VariableDispenser.GetVariables(ref varCollection);

    System.Net.WebClient myWebClient = new System.Net.WebClient();
    string webResource = varCollection["User::RemoteUri"].Value.ToString();
    string fileName = varCollection["User::LocalFolder"].Value.ToString() + webResource.Substring(webResource.LastIndexOf('/') + 1);
    myWebClient.DownloadFile(webResource, fileName);

    Dts.TaskResult = (int)ScriptResults.Success;
}

Capture d'écran # 1:

1

Capture d'écran # 2:

2

Capture d'écran n ° 3:

3

Capture d'écran # 4:

4

Capture d'écran # 5:

5

Capture d'écran # 6:

6

32
user756519

Juste une alternative pour le script @ user756519, pas aussi rapide, mais plus pare-balles

public void Main()
{
    Variables varCollection = null;

    Dts.VariableDispenser.LockForRead("User::RemoteUri");
    Dts.VariableDispenser.LockForRead("User::LocalFolder");
    Dts.VariableDispenser.GetVariables(ref varCollection);

    System.Net.WebClient myWebClient = new System.Net.WebClient();
    string webResource = varCollection["User::RemoteUri"].Value.ToString();
    string fileName = varCollection["User::LocalFolder"].Value.ToString() + webResource.Substring(webResource.LastIndexOf('/') + 1);

    byte[] data;
    using (WebClient client = new WebClient())
    {
        data = client.DownloadData(webResource);
    }
    FileInfo file = new System.IO.FileInfo(fileName);
    file.Directory.Create(); // If the directory already exists, this method does nothing.
    File.WriteAllBytes(file.FullName, data);

    Dts.TaskResult = (int)ScriptResults.Success;
}

De cette façon, webClient ne reste pas suspendu et vous ne dépendez pas non plus de l'existence précédente du répertoire C:\Temp. A part ça, excellente réponse de @ user756519, très détaillée.

7
RMiranda

Voici quelques options:

  1. Des outils tiers tels que CozyRoc ou BlueSSIS.
  2. Tâche de script avec WebClient
  3. Tâche de script avec HTTP Connection Manager

Exemples de tâches de script sur: http://Microsoft-ssis.blogspot.com/2011/05/download-source-file-from-website-with.html

5
Joost