2011-08-17 3 views
0

Je suis en train de publier sur Blogger en utilisant le composant idHTTP, cependant, je reçois une erreur "HTTP/1.0 400 Bad Request".Publication sur blogger via idHTTP

D'abord, je reçois le code Auth, qui fonctionne parfaitement avec en utilisant le code ci-dessous:

TStringList *request = new TStringList; 
TStringList *response = new TStringList(); 

IdHTTP2->Request->Connection = "Keep-Alive"; 
IdHTTP2->Request->ContentType = "application/x-www-form-urlencoded"; 
IdSSLIOHandlerSocketOpenSSL1->SSLOptions->Method = sslvSSLv23; 

request->Clear(); 
request->Values["accountType"] = "GOOGLE"; 
request->Values["Email"]  = "[email protected]"; 
request->Values["Passwd"]  = "yyyyyyy"; 
request->Values["source"]  = "test-test"; 
request->Values["service"]  = "blogger"; 

response->Text = IdHTTP2->Post("https://www.google.com/accounts/ClientLogin", request); 
auth = response->Values["Auth"]; //working perfectly 

Ensuite, je reçois le blogid et enfin je tente de poster un message à Blogger en utilisant le code ci-dessous, mais à ce moment, je reçois une erreur "HTTP/1.0 400 Bad Request".

request->Clear(); 
request->Text = Memo3->Lines->Text; //put entry into request var 

IdHTTP2->Request->CustomHeaders->Clear(); 
IdHTTP2->Request->CustomHeaders->Add("GData-Version=2.0"); 
IdHTTP2->Request->CustomHeaders->Add("Authorization: GoogleLogin auth="+auth); 
IdHTTP2->Request->ContentType = "application/atom+xml"; 

response->Text = IdHTTP2->Post("https://www.blogger.com/feeds/" + blogID + "/posts/default", request); // I got "HTTP/1.0 400 Bad Request" error right here. 

C'est l'entrée que je suis en train de poster:

<entry xmlns='http://www.w3.org/2005/Atom'> 
    <title type='text'>Marriage!</title> 
    <content type='xhtml'> 
    <div xmlns="http://www.w3.org/1999/xhtml"> 
     <p>Mr. Darcy has <em>proposed marriage</em> to me!</p> 
     <p>He is the last man on earth I would ever desire to marry.</p> 
     <p>Whatever shall I do?</p> 
    </div> 
    </content> 
    <category scheme="http://www.blogger.com/atom/ns#" term="marriage" /> 
    <category scheme="http://www.blogger.com/atom/ns#" term="Mr. Darcy" /> 
</entry> 

J'ai cherché une bonne façon de le poster avec idHTTP mais je trouve rien .. :(

Est-ce que quelqu'un sait ce que je fais mal?

BTW, j'utilise CodeGear Delphi/C++ Builder 2009 et la version d'Indy est 10.

Toute aide est grandement appréciée. Merci!

+0

Ne pas voir un problème à première vue, vous pourriez essayer de assurez-vous que vous Il n'y a pas d'espaces supplémentaires dans le jeton Auth. J'ai longtemps souffert de 400 jusqu'à ce que je me rende compte que je récupérais un espace supplémentaire à la fin du jeton Auth dans les en-têtes. –

Répondre

0

J'ai découvert comment le faire fonctionner.

J'ai enlevé la ligne

IdHTTP2->Request->CustomHeaders->Add("GData-Version=2.0"); 

Je remplacé

IdHTTP2->Request->CustomHeaders->Add("Authorization: GoogleLogin auth="+auth); 

par

IdHTTP2->Request->CustomHeaders->Values["Authorization"] = "GoogleLogin auth="+auth; 

De: https://forums.embarcadero.com/message.jspa?messageID=252770