2012-06-14 4 views
0

J'essaie de tester une API de repos pour télécharger un fichier local vers une URL https. J'utilise actuellement curl pour le faire. Le problème est que mon POST in curl est converti en PUT (http://curl.haxx.se/docs/manpage.html) mentionne la même chose. Pour tester la ligne de commande J'utilise les éléments suivants:chargement d'un document local en utilisant php

boucle -H "Content-Type: application/json" -H "Autorisation: Porteuse XXXXXXXXXXXXXXXYYYYYzzzzzz" -H "Accept-Version: ~ 1" - H "Sauf: 100-continue" -H "Accept-version: ~ 1" -T "SomeFile.pdf" "https://abc-xyz.co/docs"

sortie:

{"code":"BadMethod","message":"/docs does not support PUT"} 

mon code php:

$url = '"https://abc-xyz.co/docs'; 
$filepath = '/Users/me/Documents/somefile.pdf'; //mac path 
$ch = curl_init($url); 
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); 
curl_setopt($ch, CURLOPT_HTTPHEADER, 
array('Authorization: Bearer XXXXXXXXXXXXXXXYYYYYzzzzzz', 'Accept-Version: ~1', 'Except: 100-continue'); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLINFO_HEADER_OUT, true); 
$file = "@".$filepath; 
curl_setopt($ch, CURLOPT_POSTFIELDS,$file); 
$response = curl_exec($ch); 
if(!CURL_ERROR($ch)) 
    {  
    echo"\n The output is:".$response; 
    } 
else 
    { 
    echo "\nUpload failed ".curl_error($ch); 
    exit; 
    } 
curl_close($ch); 

Sortie: j'obtiens une erreur d'analyse.

Quelqu'un peut me renseigner avec 3 choses:

  1. Puis-je utiliser une boucle pour faire POST pour https? si oui, comment? et si non, quelle devrait être ma démarche?
  2. Comment passer le nom du chemin du fichier dans mon php? J'ai essayé "@". $ Filepath aussi mais il ne l'aime toujours pas.
  3. Si je veux restreindre le type de téléchargement de mon fichier à un format pdf, est-ce que je devrais utiliser le type mime? (Application/pdf ????)

Merci, DR

Répondre

0

De la ligne de commande, voir post fileupload with curl.

Depuis PHP, voir the manual

Les données complètes pour publier dans une opération de HTTP "POST". Pour publier un fichier, ajoutez un nom de fichier avec @ et utilisez le chemin d'accès complet. Le type de fichier peut être explicitement spécifié en suivant le nom du fichier avec le type au format '; type = type_mime'. Ce paramètre peut être transmis en tant que chaîne codée en url, comme 'para1 = val1 & para2 = val2 & ...' ou sous forme de tableau avec le nom du champ comme valeur de clé et de champ en tant que valeur. Si la valeur est un tableau, l'en-tête Content-Type sera défini sur multipart/form-data. Depuis PHP 5.2.0, la valeur doit être un tableau si les fichiers sont passés à cette option avec le préfixe @.

curl_setopt($ch, CURLOPT_POSTFIELDS,array('someuploadname'=> "@".$filepath)); 
+0

Merci Wrikken. Je vais essayer ce que vous avez suggéré. – 38172

+0

J'ai regardé post fileupload avec curl. mentionné mais le problème est que j'envoie le fichier à travers https et le POST de Curl est converti en "PUT" que mon serveur ne supporte pas. Je veux de l'aide pour télécharger un fichier local en utilisant POST sur https. – 38172

+0

@ 38172: alors je ne peux pas reproduire votre problème. L'affichage avec le tableau en php comme mentionné juste _works here (tm) _ ... et voilà, la réponse du super-utilisateur avec curl fonctionne ici aussi. Êtes-vous sûr que le problème n'est pas dans un proxy/côté réception? – Wrikken

Questions connexes