2017-09-28 1 views
0

de boucle Je dirigeais une commande curl comme suit:Extraction d'information de -X POST

curl -v -X POST "https://westus.api.cognitive.microsoft.com/spid/v1.0/identify?identificationProfileIds=c8f13848-b484-4e40-baac-29a5d3670ce7,8d42156a-8af9-42ac-92a1-77a95c22f3c2,408e09a8-f42f-4cb3-b24f-26c29b476150&shortAudio=true" -H "Content-Type:application/octet-stream" -H "Ocp-Apim-Subscription-Key:$apikey_SpeakerRecog" --data-binary @req.wav` 

La commande appelle une API d'identification des haut-parleurs Microsoft et correspond à mon enregistré .wav contre les ID de profil que j'ai sur le système. Je suis après l'identifiant de profil auquel il correspond.

je reçois un journal détaillé, mais le journal ne me dit pas quel ID profil a été accepté, il dit simplement « accepté ». Dans le journal, il y a une entrée sur l'emplacement de l'opération qui a un ID. J'ai besoin d'utiliser cet identifiant dans une autre commande curl pour obtenir l'identifiant du profil.

Je me bats vraiment pour obtenir ce code d'utilisation du journal. J'allais utiliser grep pour extraire l'ID, mais j'ai du mal à enregistrer le journal dans un fichier ou par rapport à une variable pour ensuite utiliser grep. J'ai essayé d'écrire en sauvegardant la sortie dans le fichier texte mais le fichier texte est vide.

je besoin d'aide à extraire le operationID à partir du paramètre fonctionnement emplacement du journal.

Voir partie du journal ci-dessous:

Content-Length: 160044 
Expect: 100-continue 

HTTP/1.1 100 Continue 
    0 156k 0  0 0  0  0  0 --:--:-- --:--:-- --:--:--  0} [data not shown] 
HTTP/1.1 202 Accepted 
Cache-Control: no-cache 
Pragma: no-cache 
Content-Length: 0 
Expires: -1 
Operation-Location: https://westus.api.cognitive.microsoft.com/spid/v1.0/operations/6cbd497c-652f-4723-b5a2-4087af4a01c9 
X-AspNet-Version: 4.0.30319 
X-Powered-By: ASP.NET 
+2

Prefix votre code/données avec quatre espaces blancs. Veuillez jeter un coup d'œil à [edit-help] (http://stackoverflow.com/editing-help). – Cyrus

+0

Je pensais que je l'ai fait. Parlez-vous de la commande Curl? – Sherry

+0

Votre question a été formatée par Benjamin W. – Cyrus

Répondre

0

Vous pouvez utiliser sed pour cela:

sed -n -r 's/^.*Operation-Location:.*\/([^/]+)$/\1/p' 

Exemple d'utilisation:

$ sed -n -r 's/^.*Operation-Location:.*\/([^/]+)$/\1/p' file 
6cbd497c-652f-4723-b5a2-4087af4a01c9 

Maintenant, la question de la capture de la sortie de curl: curl écrit la sortie sur st derr, vous devez donc rediriger cela. Aussi, vous devez désactiver les progrès et l'affichage des codes d'erreur avec l'option --silent, comme:

curl -v --silent https://whatever.you.li.ke 2>&1 

Ensuite, vous pouvez tuyau dans votre appel sed/grep:

curl -v --silent https://whatever.you.li.ke 2>&1 | sed -n -r 's/Operation-Location:.*\/([^/]+)$/\1/p' 

OU vous pouvez écrire le sortie de la commande boucle vers un fichier avec l'utilisation de l'option --stderr:

curl -v --silent --stderr curl.log https://whatever.you.li.ke 

et libérer votre magie grep/o sed n ce fichier journal.

+0

Merci. Merci d'ignorer **. J'avais ajouté ceux pensant que l'éditeur rendrait le texte audacieux pour plus de clarté, mais cela n'a pas fonctionné, donc je l'ai mis à jour pour exclure **. Donc, pour cette commande sed, vous supposez que le journal est déjà stocké dans le fichier et que vous lisez ensuite le fichier. C'est logique, mais j'ai du mal à créer le fichier journal en premier lieu. J'exécute cette commande curl sur linux cmd, mais je suis incapable de sauvegarder la sortie à quoi que ce soit. J'ai ajouté> fichier_journal.txt à la fin de la commande curl mais produit un fichier vide. Je ne sais pas si c'est avec cette commande curl spécifique? des idées? – Sherry

+0

J'ai changé ma réponse en m'adressant à votre vrai problème. –

+0

presque là Il est de retour ce qui suit:> 6cbd497c-652f-4723-b5a2-4087af4a01c9 ... il y a '>' à l'avant de celui-ci. Je ne suis pas très familier avec sed. Pourriez-vous expliquer rapidement certaines des commandes que vous avez utilisées? – Sherry

0
$ grep -oP 'https.*\/\K.*(?=\*\*)' log_file 
6cbd497c-652f-4723-b5a2-4087af4a01c9 

La commande imprimerait les motifs entre la dernière barre oblique / à **

+0

Merci. Merci d'ignorer **. J'avais ajouté ceux pensant que l'éditeur rendrait le texte audacieux pour plus de clarté, mais cela n'a pas fonctionné, donc je l'ai mis à jour pour exclure **. Donc, pour cette commande grep, vous supposez que le journal est déjà stocké dans le fichier journal et que vous lisez ensuite le fichier journal. C'est logique, mais j'ai du mal à créer le fichier journal en premier lieu. J'exécute cette commande curl sur linux cmd, mais je suis incapable de sauvegarder la sortie à quoi que ce soit. J'ai ajouté> log_file.txt à la fin de la commande curl mais il produit un fichier vide. Je ne sais pas si c'est avec cette commande curl spécifique? des idées? – Sherry