Как я могу опубликовать multipart / form-данные, которые содержат символ - PullRequest
1 голос
/ 18 сентября 2009

У меня много часов болит голова, я пытаюсь опубликовать изображение в твитпике с помощью учетной записи в твиттере, используя curl.

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

Это всегда возврат

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

Но когда я сменил пароль в твиттере на простое слово (не содержит "=", "-", "[") Это нормально

<?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>

Мой вопрос заключается в том, как сделать это с помощью надежного пароля, содержащего любой символ. Подскажите пожалуйста. Спасибо.

1 Ответ

0 голосов
/ 03 декабря 2009

Я попытался запустить ваш пример с тем же паролем (для тестовой учетной записи), и у меня не было проблем с загрузкой моего образца изображения. Я даже просмотрел pcap, чтобы убедиться, что кодирование выполняется правильно.

-desktop:~/Dropbox$ curl -vv -F "username=********" -F "password=='hwsh[g" -F "message=test twitpic" -F media=@./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>

какую оболочку вы используете? в зависимости от того, какие «специальные» символы вы используете в своем пароле, вам может потребоваться экранировать их по-разному, чтобы не допустить расширения оболочки / etc

каждый раз, когда вы используете двойные кавычки в командной строке, вам приходится иметь дело с расширением переменной, особенно если ваш пароль содержит знак доллара ($). может быть лучше использовать одинарные кавычки вокруг поля пароля и явно экранировать любые одинарные кавычки в вашем пароле:

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