Ребят, помогите разобраться, как сформировать POST запрос через CURL на php чтобы изменить аватар в Twitter
вот выдрал пример отправки фото из своего скрипта, это для контакта, PHP: $photo=array('photo'=>'@'.'dir/ava.jpg','al'=>'1','act'=>'profile_photo','mid'=>$id,'photo_hash'=>$photo_hash,'hash'=>$hash,'rhash'=>$rhash); curl_setopt($ch, CURLOPT_POSTFIELDS, $photo); то есть чтобы отправить multipartform-data, нужно - сниффером перехватить пакет, там будет написанно что это пост запрос в формате multipartform-data -список полей в запросе копируеш, одно из полей это содержимое файла с картинкой - в пхп создаёш массив, где названия полей, это названия параметров из пост запроса, - этот массив используеш при отправке пост запроса
Отправляются вот такие заголовки... Code: POST /settings/profile HTTP/1.1 Accept: image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-ms-application, application/x-ms-xbap, application/vnd.ms-xpsdocument, application/xaml+xml, */* Referer: http://twitter.com/settings/profile Accept-Language: ru User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; MRSPUTNIK 2, 4, 0, 270; BTRS122833; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; AskTbSPC2/5.13.1.18107) Content-Type: multipart/form-data; boundary=---------------------------7db29f2d80dd2 Accept-Encoding: gzip, deflate Host: twitter.com Content-Length: 8881 Connection: Keep-Alive Cache-Control: no-cache Cookie: tz_offset_sec=10800; guest_id=v1%3A131215956554041548; __utma=43838368.395718010.1309529431.1320762942.1321108173.13; __utmz=43838368.1309529431.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); twll=l%3D1320759436; __utmv=43838368.lang%3A%20ru; k=10.35.50.118.1320759339162482; js=1; auth_token=***; lang=ru; twid=***; _twitter_sess=***; original_referer=4bfz%2B%2BmebEkRkMWFCXm%2FCfrMiycY0SOh8XvRpejPJkZuFeuDp4CCwg%3D%3D; __utmb=43838368.4.10.1321108173; __utmc=43838368 -----------------------------7db29f2d80dd2 Content-Disposition: form-data; name="_method" put -----------------------------7db29f2d80dd2 Content-Disposition: form-data; name="authenticity_token" 1f6ae940281058be39aba53aef768a1811dfbf38 -----------------------------7db29f2d80dd2 Content-Disposition: form-data; name="profile_image[uploaded_data]"; filename="Twitter_squareLogo.png" Content-Type: image/x-png ‰PNG Как его сформировать так я и не могу понять, например что такое "-----------------------------7db29f2d80dd2" "‰PNG " и т.п
Не пойму в чем дело, картинка не меняется, ответа от сервера вообще не приходит ни какого... PHP: $url='http://twitter.com/settings/profile'; $postfields = array( '_method' => 'put', 'authenticity_token' => $authenticity_token, 'profile_image[uploaded_data]' => '@1.png' ); $cookie='twid='.$twid.'; auth_token='.$auth_token; $content=conn($url,$postfields,$proxy,$cookie); echo $content ; Функция conn отправляет данне CURL Заголовки отправляю такие: PHP: $head = array(); $head[] = "Referer: http://twitter.com"; $head[] = "Accept-Language: ru"; $head[] = "Accept-Encoding: gzip, deflate"; $head[] = "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; ru; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13 ( .NET CLR 3.5.30729)"; $head[] = "Connection: Keep-Alive"; $head[] = "Cache-Control: no-cache";
сейчас глянул твой твиттер - во первых у тебя только 3 поля в пост запросе, а там в несколько раз больше полей, попробуй сниффер Http Analyzer -во вторых Referer не правильный, если аватар из профиля изменяеш то там http://twitter.com/settings/profile
Всем спасибо! Наконец-то я справился... Вот заголовки: PHP: $head = array(); $head[] = "Referer: twitter.com"; $head[] = "Referer: http://twitter.com/settings/profile"; $head[] = "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"; $head[] = "Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3"; $head[] = "Accept-Encoding: gzip, deflate"; $head[] = "Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7"; $head[] = "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; ru; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13 ( .NET CLR 3.5.30729)"; $head[] = "Content-Type: multipart/form-data"; $head[] = "Connection: Keep-Alive"; $head[] = "Cache-Control: no-cache"; Вот пост запрос: PHP: $postfields = array( '_method' => 'put', 'authenticity_token' => $authenticity_token, 'profile_image[uploaded_data]' => '@C:\AppServ\www\twitter\1.jpg', 'user[name]'=>$login, 'user[location]'=>'', 'user[url]'=>'http://', 'user[description]'=>'dsfsdgf', 'commit'=> 'Save' ); Если хотите отправлять данные на русском языке тогда вот так например: PHP: 'user[description]'=> iconv("windows-1251", "utf-8", "Я Русский!!!")