2013-07-09 3 views
0

Dans Delphi XE2, je suis en train de télécharger les lignes d'une note à un fichier sur mon espace web avec IdHTTP.Put:IdHTTP.Put Erreur: HTTP/1,1405 Méthode non autorisée

procedure TForm1.btnUploadClick(Sender: TObject); 
var 
    StringToUpload: TStringStream; 
begin 
    StringToUpload := TStringStream.Create(''); 
    try 
    StringToUpload.WriteString(memo.Lines.Text); 
    // Error: HTTP/1.1 405 Method Not Allowed. 
    IdHTTP1.Put(edtOnlineFile.Text, StringToUpload); 
    finally 
    StringToUpload.Free; 
    end; 
end; 

Mais je reçois toujours ce message d'erreur:

enter image description here

Alors, que dois-je faire pour éviter l'erreur et faire le téléchargement?

+0

Voir la réponse à http://stackoverflow.com/questions/17546558/ « whatch comment il fonctionne et faire la même chose » –

+0

« La méthode spécifiée dans la demande en ligne est pas autorisée pour la ressource identifiée par l'URI de demande La réponse DOIT inclure un en-tête Allow contenant une liste de méthodes valides pour la ressource demandée. " – OnTheFly

Répondre

3

Cela signifie que le serveur HTTP ne prend pas en charge la méthode PUT sur cette URL (le cas échéant). Il n'y a rien que vous puissiez faire à ce sujet. Vous aurez probablement à télécharger vos données d'une autre manière, impliquant généralement POST à la place, ou un protocole complètement différent, comme FTP.

BTW, lors de l'utilisation TStringStream comme ça, ne pas oublier de réinitialiser le Position si vous utilisez la méthode WriteString():

StringToUpload.WriteString(memo.Lines.Text); 
StringToUpload.Position := 0; 

Sinon, utilisez le constructeur à la place:

StringToUpload := TStringStream.Create(memo.Lines.Text); 
+0

Merci pour l'indice - J'utilise FTP maintenant. Que utiliseriez-vous? (La chaîne peut avoir une longueur comprise entre 300 et 3000 octets). – user1580348

+1

Ce n'est pas une question de choix, mais ce que le serveur supporte réellement. –

0

Merci pour le code ci-dessus, voici peut-être un peu plus d'informations avec une petite fonction d'aide pour aider ce constructeur de flux que j'ai trouvé fonctionne pour toute chaîne que vous traversez, même s'il contient des trucs binaires.

//Helper function to make JSON string correct for processing with POST/GET 
    function StringToStream(const AString: string): TStream; 
    begin 
    Result := TStringStream.Create(AString); 
    end; 

//somewhere in your code, I am posting to Spring REST, encoding must be utf-8 
IdHTTP1.Request.ContentType := 'application/json'; //very important 
IdHTTP1.Request.ContentEncoding := 'utf-8'; //which encoding? 
response := IdHTTP1.Put(URL, StringToStream(body)); //response,URL,body are declared as String 
Questions connexes