2009-09-18 6 views
1

Cela m'a fait mal à la tête pendant des heures, je tente de poster l'image à twitpic avec mon compte Twitter en utilisant curl.Comment puis-je poster multipart/formulaire-données qui contiennent le symbole

 
curl -F "username=myusername" -F "password=='hwsh[g" -F "message=test twitpic" -F [email protected]/dos/smallapps2/smallapps/tiny-delicious/snapshot/test.png http://twitpic.com/api/uploadAndPost 

Il retourne alway

<?xml version="1.0" encoding="UTF-8"?> 
    <rsp stat="fail"> 
     <err code="1001" msg="Invalid twitter username or password" /> 
    </rsp> 

Mais quand je l'ai changé le mot de passe de twitter au simple mot (pas contenir "=", "-", "[") Il OK

<?xml version="1.0" encoding="UTF-8"?> 
<rsp status="ok"> 
<statusid>4084106555</statusid> 
<userid>33348202</userid> 
<mediaid>56qrz</mediaid> 
<mediaurl>http://twitpic.com/i6qwg</mediaurl> 
</rsp> 

Ma question est comment faire cette chose avec un mot de passe fort qui contient n'importe quel caractère. Indice s'il vous plaît. Merci.

+2

Essayez urlencode it. – Eimantas

Répondre

0

J'ai essayé d'exécuter votre exemple, avec exactement le même mot de passe (sur un compte de test) et je n'ai rencontré aucun problème lors du téléchargement de mon exemple d'image. J'ai même regardé à travers un pcap pour m'assurer que l'encodage est fait correctement.

-desktop:~/Dropbox$ curl -vv -F "username=********" -F "password=='hwsh[g" -F "message=test twitpic" -F [email protected]/code_Quality_Measurement_wtfm.jpg http://twitpic.com/api/uploadAndPost 
* About to connect() to twitpic.com port 80 (#0) 
* Trying 174.36.58.233... connected 
* Connected to twitpic.com (174.36.58.233) port 80 (#0) 
> POST /api/uploadAndPost HTTP/1.1 
> User-Agent: curl/7.19.5 (i486-pc-linux-gnu) libcurl/7.19.5 OpenSSL/0.9.8g zlib/1.2.3.3 libidn/1.15 
> Host: twitpic.com 
> Accept: */* 
> Content-Length: 46066 
> Expect: 100-continue 
> Content-Type: multipart/form-data; boundary=----------------------------50b761e49108 
> 
< HTTP/1.1 100 Continue 
< HTTP/1.1 200 OK 
< Server: nginx/0.6.35 
< Date: Thu, 03 Dec 2009 19:06:38 GMT 
< Content-Type: application/xml 
< Connection: keep-alive 
< X-Powered-By: PHP/5.2.9 
< Content-Length: 196 
< 
<?xml version="1.0" encoding="UTF-8"?> 
<rsp status="ok"> 
<statusid>6311967029</statusid> 
<userid>**********</userid> 
<mediaid>rzu6c</mediaid> 
<mediaurl>http://twitpic.com/rzu6c</mediaurl> 
* Connection #0 to host twitpic.com left intact 
* Closing connection #0 
</rsp> 

quel Shell utilisez-vous? en fonction des caractères "spéciaux" que vous utilisez dans votre mot de passe, vous devrez peut-être leur échapper différemment pour empêcher l'expansion du shell/etc

chaque fois que vous utilisez des guillemets doubles dans une ligne de commande, vous devez gérer l'expansion des variables , surtout si votre mot de passe contient un dollar ($). il peut être préférable d'utiliser des guillemets simples autour du champ de mot de passe, et d'échapper explicitement les guillemets simples de votre mot de passe:

-F 'password==\'hwsh[g'