| 24.01.2009, 22:54 | Hector | как быть с курлом в таком случае?
Content-Type: multipart/form-data; boundary=---------------------------257062384924075
Content-Length: 961
-----------------------------257062384924075
Content-Disposition: form-data; name="filedata"; filename=""
Content-Type: application/octet-stream
-----------------------------257062384924075
Content-Disposition: form-data; name="_removeImage"
true
-----------------------------257062384924075
Content-Disposition: form-data; name="firstName"
first
-----------------------------257062384924075
Content-Disposition: form-data; name="lastName"
last
-----------------------------257062384924075
Content-Disposition: form-data; name="location"
usa
-----------------------------257062384924075
Content-Disposition: form-data; name="homepage"
http://abc.com
-----------------------------257062384924075
Content-Disposition: form-data; name="bio"
my bio here
and here yes
-----------------------------257062384924075
Content-Disposition: form-data; name="interests"
no interests
-----------------------------257062384924075--
HTTP/1.x 302 Moved Temporarily
Пост запрос нужно делать массивом? Если да то как записать? ) спасибо |
| 24.01.2009, 23:50 | Домкрат | дык
$post = array(
'value' => 'data',
);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post); |
| 25.01.2009, 00:16 | Hector | сделал так и нихуя (
$post = array();
$post[] = '-----------------------------'.$bound;
$post[] = 'Content-Disposition: form-data; name="filedata"; filename=""';
$post[] = 'Content-Type: application/octet-stream';
$post[] = '';
$post[] = '';
$post[] = '-----------------------------'.$bound;
$post[] = 'Content-Disposition: form-data; name="_removeImage"';
$post[] = '';
$post[] = 'true';
$post[] = '-----------------------------'.$bound;
$post[] = 'Content-Disposition: form-data; name="firstName"';
$post[] = '';
$post[] = 'first';
$post[] = '-----------------------------'.$bound;
$post[] = 'Content-Disposition: form-data; name="lastName"';
$post[] = '';
$post[] = 'last';
$post[] = '-----------------------------'.$bound;
$post[] = 'Content-Disposition: form-data; name="location"';
$post[] = '';
$post[] = 'usa';
$post[] = '-----------------------------'.$bound;
$post[] = 'Content-Disposition: form-data; name="homepage"';
$post[] = '';
$post[] = 'http://abc.com';
$post[] = 'Content-Disposition: form-data; name="bio"';
$post[] = '';
$post[] = 'my bio here';
$post[] = '-----------------------------'.$bound;
$post[] = 'Content-Disposition: form-data; name="interests"';
$post[] = '';
$post[] = 'no interests';
$post[] = '-----------------------------'.$bound.'--';
$post[] = '';
$post=join("\r\n", $post);
$cr=curl_init($url);
curl_setopt($cr, CURLOPT_TIMEOUT, 60);
curl_setopt($cr, CURLOPT_HEADER, 1);
curl_setopt($cr, CURLOPT_PROXY, $proxy);
curl_setopt($cr, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);
curl_setopt($cr, CURLOPT_HTTPHEADER, array("Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/x-icq, */*","Accept-Language: en-US;en;q=0.5","UA-CPU: x86","User-Agent: Opera/9.10 (Windows NT 5.1; U; en)","Connection: Keep-Alive","Content-Type: multipart/form-data; boundary=---------------------------$bound"));
// curl_setopt($cr, CURLOPT_CUSTOMREQUEST, "Content-Type: multipart/form-data; boundary=---------------------------'.$bound");
curl_setopt($cr, CURLOPT_COOKIEFILE, $cfile);
curl_setopt($cr, CURLOPT_COOKIEJAR, $cfile);
if ($ref!='') curl_setopt($cr, CURLOPT_REFERER, $ref);
curl_setopt($cr, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($cr, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($cr, CURLOPT_ENCODING, 'gzip,deflate');
curl_setopt($cr, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($cr, CURLOPT_POST, 1);
curl_setopt($cr, CURLOPT_POSTFIELDS, $post);
$r = curl_exec($cr);
curl_close ($cr);
походу кроме меня тут никто не разберется ) ебучая ошибка курла malformed еще вываливается часто |
| 25.01.2009, 00:27 | azgard | А оно так работать и не будет , Домкрат правильно намекнул.
$postdata = array(
'_removeImage' => 'true',
'firstName' => 'first',
'lastName' => 'last',
'location' => 'usa',
'homepage' => 'http://abc.com'
);
этот массив неполный, придётся его ещё добить :)
потом в курле
curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata); |
| 25.01.2009, 00:28 | Домкрат | он сам сформирует post-запрос, передавай только поля нужные, типа:
array('interests'=>'no interests'); |
| 25.01.2009, 00:29 | Hector | а вот оно где... пиздец, спасибо парни щас поколупаю |
| 25.01.2009, 00:37 | Hector | $postdata = array(
'_removeImage' => 'true',
'firstName' => 'first',
'lastName' => 'last',
'location' => 'usa',
'homepage' => 'http://abc.com',
'bio' => 'my bio here',
'interests' => 'no'
);
и куй собачий |
| 25.01.2009, 00:41 | azgard | ыыы) яж написал "этот массив неполный, придётся его ещё добить"
тама не все поля
допиши 'filedata'=>'(тут что тебе надо)', |
| 25.01.2009, 00:59 | cossack | Кстати, а кто-нибудь в курсе по какому принципу формируется число вот тут:
boundary=---------------------------257062384924075
и учитывается ли оно при обработке отправленного POST запроса? |
| 25.01.2009, 01:32 | azgard | "boundary" - определяет границы строк.
Мануал тут hxxp://book.itep.ru/4/4/mime.htm
Можно начинать курить с "5.1.1. Общий синтаксис", а ещё лучше с самого начала :peace: |
| 25.01.2009, 02:08 | TerVer | $postdata = array(
'filedata'=>'@/home/admin/yourfilename.gif',
'_removeImage' => 'true',
'firstName' => 'first',
'lastName' => 'last',
'location' => 'usa',
'homepage' => 'http://abc.com',
'bio' => 'my bio here',
'interests' => 'no'
);
а вообще надо форму показать (html) если на то пошло |
| 25.01.2009, 10:56 | bataka | код перловый правда, но сам принцип понятен
my($data, $boundary) = boundary($postdata);
push @header, "Content-Type: multipart/form-data; boundary=$boundary";
$curl->setopt(CURLOPT_POST, 1);
$curl->setopt(CURLOPT_POSTFIELDS, $data);
sub boundary {
my $hash = shift;
my $return;
my $boundary = '7d93b9242503ee';
for (keys %$hash){
my $name = $_;
my $val = $hash->{$_};
$return .= qq^--$boundary\x0d\x0a^;
$return .= qq^Content-Disposition: form-data; name="$name"\x0d\x0a\x0d\x0a^;
$return .= qq^$val\x0d\x0a^;
}
$return .= '--' . $boundary . '--';
return ($return, $boundary);
} |
| 25.01.2009, 11:09 | Hector | я сегодня вечером еще покопаюсь... сейчас не могу (
azgard спасибо. Кстати чем говорить догадками ( я вчера часа 3 убил и бестолку) лучше бы готовый наглядный пример нашел ))
Content-Type: multipart/form-data; boundary=---------------------------257062384924075 = вот с этой херней что сделать? или ничего |
| 25.01.2009, 11:31 | deschain | Ничего не делай :) Такие формы часто попадаются, забиваешь просто данные, как в обычной и отправляешь. |
| 25.01.2009, 13:19 | oxenus | multipart/form-data обычно используется для аплоуда файлов.
Если тебе не надо файло аплоудить в форме - используй обычный пост запрос с полями, как обычно ты передаёшь.
Если надо файло, то можно так:
$post_data = array();
$post_data['fileupload'] = "@datafile.txt";
$post_data['field1'] = "someinfo1";
$post_data['field2'] = "someinfo2";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, 1 );
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$postResult = curl_exec($ch);
datafile.txt - это файло которое тебе надо зааплоудить, тогда курл сразу делает multipart/form-data
и сам формирует тебе заголовки
Content-Type: multipart/form-data; boundary=---------------------------ХХХХХХХХХХХ |
| 25.01.2009, 13:26 | Hector | $post = array(
'filedata' => '',
'_removeImage' => 'true',
'firstName' => 'first',
'lastName' => 'last',
'location' => 'usa',
'homepage' => 'http://abc.com',
'bio' => 'my bio here',
'interests' => 'no'
);
$r = postreq($url,$post,$ref); // это функция пост запроса курлом
не заполняет ) вообще пустота
oxenus - спасибо )
УЖЕ РАБОТАЕТ, перед пост запросом нужно было сделать 1 гет запрос ) |
| 25.01.2009, 13:33 | Hector | я наверное сам буду колупаться и отлавилвать баг ) сайт отдает Sorry, an unexpected error has occurred |
| 25.01.2009, 13:50 | Hector | УРАУРАУРА получилось))))))) всем спасибо ОГРОМНОЕ за помощь ) |
| 25.01.2009, 14:33 | azgard | Такие вопросы лучше :write: на hxxp://phpclub.ru/talk/ |
| 25.01.2009, 19:15 | Hector | Такие вопросы лучше :write: на hxxp://phpclub.ru/talk/да и тут нормально вы помогли :beer: |
| 22.02.2009, 00:00 | Barbados | вбил в гугле "php curl multipart post" думал на php.net попаду, а нет - на гофак вышел:)) |
| 22.02.2009, 00:01 | Домкрат | MWA-HA-HA!!! |
| 23.03.2009, 11:51 | baddan | можно и тут взглянуть на подобный пример:
http://habrahabr.ru/blogs/php/42158/ |
| 05.06.2009, 07:20 | digg | и я эту херню искал на гугле
Content-Type: multipart/form-data; boundary=---------------------------29288280821954
Content-Length: 2706
-----------------------------29288280821954
и тоже на гофак попал на хектора тему )))) ггг
тока я чето так и не понял какой это гет запрос там в начале надо сделать? а то у меня тоже не работает нифига сейчас. |
| 05.06.2009, 09:54 | medar | Народ, а если $postdata - ассоциативный массив, то надо же делать
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($postdata));
чтобы его в строку превратить.
Разве нет ? |
| 05.06.2009, 10:02 | digg | В своем случае я ваще не знаю скока и каких переменных в массиве.
Массив типа генерится прогой динамично в зависимости от того, че он там чекает.
Жду хектора, чтоб объяснил. |
| 05.06.2009, 10:10 | Hector | я массивом пост запрос делал как тут /showpost.php?p=105653&postcount=16
про гет запрос то лично я провтыкал 1 шаг в алгоритме |
| 05.06.2009, 10:46 | deschain | medar, можно тупо массив с пост-данными засылать в курл. Не обязательно его в строку вытягивать.
Но иногда такое не работает. |
| 05.06.2009, 10:49 | DiamondMaster | все просто, если метод формы просто POST то строка, если мультипарт, то массив
работает однозначно и всегда |
| 05.06.2009, 11:05 | Barbados | и самое главное массив не урленкодить |
| 20.06.2009, 19:53 | kalombo | Как такое для pycurl сделать? Че-то парюсь - не могу найти решение. |
| 09.07.2009, 00:53 | qbec | Аналогичная проблема, помогите разобраться.
Делаю курлом пост запрос
$post_design=array(
'bodybgcol' => '6B6666',
'bodybgimg' => '',
...
Между кавычек может грузиться файл, браузер делает такой запрос:
Content-Disposition: form-data; name="commentbgimg"; filename=""
Content-Type: application/octet-stream
Я ничего не гружу поэтому оставляю пустое поле (возможно курл в этом месте формирует пост не правильно).
...
'datebgscr' => 'scroll',
'save' => 'Сохранить'
);
Запрос нормально уходит, но в $result = curl_exec($ch);
Возвращается HTTP/1.1 200 OK Server: nginx/0.6.31 Date: Wed, 08 Jul 2009 21:35:25 GMT Content-Type: text/html; charset=windows-1251 Transfer-Encoding: chunked Connection: close |
| 09.07.2009, 13:13 | azgard | скинь код полностью, а то из написанного нечего не понятно и где это используешь |
| 09.07.2009, 14:22 | qbec | $post_design=array(
'bodybgcol' => '6B6666',
'bodybgimg' => '', // тут могут отдаваться картинки, я ничего не отдаю
'bodybgpos' => 'top left',
'bodybgrep' => 'repeat',
'bodybgscr' => 'scroll',
'postbgcol' => 'FCF8F8',
'topiccol' => 'FCF5F5',
'postbgfcol' => '0E0E0E',
'postbgimg' => '',
'postbgpos' => 'top left',
'postbgrep' => 'repeat',
'postbgscr' => 'scroll',
'commentbgcol' => '',
'commentbgfcol' => '0048AB',
'commentbgimg' => '',
'commentbgpos' => 'top left',
'commentbgrep' => 'repeat',
'commentbgscr' => 'scroll',
'textareabgcol' => '0048AB',
'textareabgimg' => '',
'textareabgpos' => 'top left',
'textareabgrep' => 'repeat',
'textareabgscr' => 'scroll',
'menubgcol' => '0048AB',
'menubgimg' => '',
'menubgpos' => 'top left',
'menubgrep' => 'repeat',
'menubgscr' => 'scroll',
'headbgcol' => '0048AB',
'blogtitleclr' => '0048AB',
'blogsignclr' => '0048AB',
'headbgimg' => '',
'headbgpos' => 'top left',
'headbgrep' => 'repeat',
'headbgscr' => 'scroll',
'bottombgcol' => '0048AB',
'bottombgimg' => '',
'bottombgpos' => 'top left',
'bottombgrep' => 'repeat',
'bottombgscr' => 'scroll',
'crumbsbgcol' => '0048AB',
'crumbsbgimg' => '',
'crumbsbgpos' => 'top left',
'crumbsbgrep' => 'repeat',
'crumbsbgscr' => 'scroll',
'datebgcol' => '0048AB',
'datebgimg' => '',
'datebgpos' => 'top left',
'datebgrep' => 'repeat',
'datebgscr' => 'scroll',
'save' => 'Сохранить'
);
$html_design = zapros($next_url[1],$user_agent,$ref,$post_design,TRUE,TRUE);
function zapros($url,$user_agent,$referer,$post,$post_true, $header_true) {
$ch = curl_init($url);
// curl_setopt($ch, CURLOPT_PROXY, $proxy);
curl_setopt($ch, CURLOPT_USERAGENT, $user_agent);
curl_setopt($ch, CURLOPT_REFERER, $referer);
if ($post_true){
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
curl_setopt($ch, CURLOPT_POST, TRUE);
}else {
curl_setopt($ch, CURLOPT_POST, FALSE);
}
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_HEADER, $header_true);
curl_setopt($ch, CURLOPT_NOBODY, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_COOKIEJAR, "coockies.txt");
curl_setopt($ch, CURLOPT_COOKIEFILE, "coockies.txt");
curl_setopt ($ch, CURLOPT_COOKIE, "hlSession=en; hl=en");
$result = curl_exec($ch);
curl_close($ch);
sleep(rand(0,1));
return $result;
}
Используется для настройки дизайна в блог-постилке. |
| 09.07.2009, 15:55 | azgard | 'bodybgimg' => '@', // тут могут отдаваться картинки, я ничего не отдаю
перед путём к картинке должен стоять @ - если передеёшь
попробуй так
function zapros($url, $user_agent ,$post) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_USERAGENT, $user_agent);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_COOKIEJAR, "coockies.txt");
curl_setopt($ch, CURLOPT_COOKIEFILE, "coockies.txt");
curl_setopt ($ch, CURLOPT_COOKIE, "hlSession=en; hl=en");
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
curl_setopt($ch, CURLOPT_POST, 1);
$result = curl_exec($ch);
curl_close($ch);
return $result;
}
а вообще сначала написал бы рабочий код без излишеств и только потом добавлял туда остальное |
| 09.07.2009, 15:55 | medar | все просто, если метод формы просто POST то строка, если мультипарт, то массив
работает однозначно и всегда
О май факин гад :) Спасибо. |
| 09.07.2009, 16:29 | qbec | перед путём к картинке должен стоять @ - если передеёшь
а вообще сначала написал бы рабочий код без излишеств и только потом добавлял туда остальное
Да нет... Не в картинке дело. Допустим я ничего не передаю тогда поля остаются пустыми. Всеравно возвращает Transfer-Encoding: chunked.
И не в функции дело, на этот сайт нормально отправляются этой функцией др запросы. Может курл Accept-Encoding gzip,deflate не делает? Что вообще может вызвать ошибку в хеадере Transfer-Encoding: chunked?
//Нашел
Курл судя по всему отправляет заголовок Transfer-Encoding: chunked и режет тело запроса на куски,
возможно из-за длинного запроса... А на сервере скорее всего nginx не поддерживает chunked передачу.
Как исправить знает кто? |
| 11.07.2009, 10:21 | gcc | этот массив неполный, придётся его ещё добить :)
огромное спасибо, щас минут 40 убил на это, не все поля отсылал :) |
| 12.07.2009, 02:24 | azgard | Курл судя по всему отправляет заголовок Transfer-Encoding: chunked и режет тело запроса на куски,
возможно из-за длинного запроса... А на сервере скорее всего nginx не поддерживает chunked передачу.
Как исправить знает кто?
curl_setopt($ch, CURLOPT_NOBODY, false); поставь непосредственно перед curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
может поможет |
| 12.07.2009, 06:19 | ziavra | А чего ты вообще пристал к Transfer-Encoding: chunked ? Если у тебя сервер в ответе такое пишет, то он явно всё поддерживает. А так вот еще нашлось:
CURLOPT_HTTP_TRANSFER_DECODING
Pass a long to tell libcurl how to act on transfer decoding. If set to zero, transfer decoding will be disabled, if set to 1 it is enabled (default). libcurl does chunked transfer decoding by default unless this option is set to zero. (added in 7.16.2)
Оно правда из описания для сишной libcurl, но можно попробовать.
curl_setopt ($ch, CURLOPT_HTTP_TRANSFER_DECODING, 0);
А можно вообще поставить версию http 1.0, там точно никаких чанков не будет :-)
curl_setopt ($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
Эта опция работает - проверено, хотя её и нет в описании к curl'u в php |
| 13.08.2009, 22:10 | kavopero | может кто подскажет
POST /form.php -----------------------------16505299403966
Content-Disposition: form-data; name="pn"
ZWU5d2Utd1pJ
-----------------------------16505299403966
Content-Disposition: form-data; name="domain"
dombimbom
-----------------------------16505299403966
Content-Disposition: form-data; name="MAX_FILE_SIZE"
1048576
-----------------------------16505299403966
Content-Disposition: form-data; name="service_type"
dns
-----------------------------16505299403966
Content-Disposition: form-data; name="service_type_radio"
on
-----------------------------16505299403966
Content-Disposition: form-data; name="ns_host[0]"
ns1.dombimbom.com
-----------------------------16505299403966
Content-Disposition: form-data; name="ns_host[1]"
ns2.dombimbom.com
-----------------------------16505299403966
Content-Disposition: form-data; name="ns_host[2]"
-----------------------------16505299403966
Content-Disposition: form-data; name="ns_host[3]"
-----------------------------16505299403966
Content-Disposition: form-data; name="ns_host[4]"
-----------------------------16505299403966
Content-Disposition: form-data; name="button"
Set up
-----------------------------16505299403966
Content-Disposition: form-data; name="record_host"
-----------------------------16505299403966
Content-Disposition: form-data; name="ttl"
86400
-----------------------------16505299403966
Content-Disposition: form-data; name="record_type"
-----------------------------16505299403966
Content-Disposition: form-data; name="record_priority"
-----------------------------16505299403966
Content-Disposition: form-data; name="record_value"
-----------------------------16505299403966
Content-Disposition: form-data; name="site_url"
-----------------------------16505299403966
Content-Disposition: form-data; name="site_title"
-----------------------------16505299403966
Content-Disposition: form-data; name="frame"
3
-----------------------------16505299403966
Content-Disposition: form-data; name="site_description"
-----------------------------16505299403966
Content-Disposition: form-data; name="search_keyword"
-----------------------------16505299403966
Content-Disposition: form-data; name="google_email_cname_host"
-----------------------------16505299403966--
Вот что составил:
curl_setopt($ch, CURLOPT_URL, 'http://url.com/form.php');
curl_setopt($ch, CURLOPT_POST, 1);
$pa=array(
"pn"=>"ZWU5d2Utd1pJ",
"domain"=>"dombimbom",
"MAX_FILE_SIZE"=>"1048576",
"service_type"=>"dns",
"service_type_radio"=>"on",
"ns_host[0]"=>"ns1.dombimbom.com",
"ns_host[1]"=>"ns2.dombimbom.com",
"ns_host[2]"=>'',
"ns_host[3]"=>'',
"ns_host[4]"=>'',
"button"=>"Set up",
"record_host"=>'',
"ttl"=>"86400",
"record_type"=>'',
"record_priority"=>'',
"record_value"=>'',
"site_url"=>'',
"site_title"=>'',
"frame"=>"3",
"site_description"=>'',
"search_keyword"=>'',
"google_email_cname_host"=>''
);
curl_setopt($ch, CURLOPT_POSTFIELDS, $pa);
$page = curl_exec($ch);
В результате при курлении этого теряется авторизация на сайте. Где ошибка? |
| 13.08.2009, 22:39 | Barbados | в куках |
| 14.08.2009, 00:12 | oso | Возможно, еще и Referer нужно указывать |
| 14.08.2009, 00:19 | kavopero | а как же до этого другие страницы проходил без проблем?
Вот этой бадяги при авторизации разве недостаточно?
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT,60);
curl_setopt($ch, CURLOPT_TIMEOUT,60);
curl_setopt($ch, CURLOPT_URL, 'https://url.com');
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.5) Gecko/2008120122 Firefox/3.0.5');
curl_setopt($ch, CURLOPT_REFERER, 'https://url.com');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cocc_cookie.txt');
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cocc_cookie.txt');
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
$page = curl_exec($ch); |
| 14.08.2009, 07:15 | Barbados | все верно у тебя, но эту бодягу нужно вставлять в каждый пост или гет запрос |
| 14.08.2009, 07:25 | Barbados | используй вот эти функции при работе с курлом - не будет никаких проблем
надо гет сделать -
$content = curlGET("http://www.google.com/1", "http://www.google.com/", $data['cookie_file'] , $data['proxy'], 60, 1);
пост -
$post_data = "a=1&b=2";
$content = curlPOST($post_data, "http://www.google.com/1", "http://www.google.com/", $data['cookie_file'] , $data['proxy'], 60, 1);
код ф-ций:
function curlPOST($post_data, $url, $referrer='', $cookie_file='', $proxy='', $timeout=60, $header=0) {
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_USERAGENT, "Opera/9.10 (Windows NT 5.1; U; en)");
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
if($referrer) curl_setopt($ch, CURLOPT_REFERER, $referrer);
if($header) curl_setopt($ch, CURLOPT_HEADER, 1);
if($proxy) {curl_setopt($ch, CURLOPT_PROXY, $proxy);
curl_setopt ($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);
//curl_setopt($ch, CURLOPT_PROXYUSERPWD, "user:pass");
//curl_setopt($ch, CURLOPT_PROXYAUTH, 1);
}
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
if($cookie_file) {
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);
}
$content=curl_exec($ch);
curl_close($ch);
return $content;
}
function curlGET($url, $referrer='', $cookie_file='', $proxy='', $timeout=60, $header=0) {
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_USERAGENT, "Opera/9.10 (Windows NT 5.1; U; en)");
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
if($referrer) curl_setopt($ch, CURLOPT_REFERER, $referrer);
if($header) curl_setopt($ch, CURLOPT_HEADER, 1);
if($proxy) {curl_setopt($ch, CURLOPT_PROXY, $proxy);
curl_setopt ($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);
//curl_setopt($ch, CURLOPT_PROXYUSERPWD, "user:pass");
//curl_setopt($ch, CURLOPT_PROXYAUTH, 1);
}
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);
curl_setopt ($ch, CURLOPT_COOKIE, $cookie_file);
$content=curl_exec($ch);
curl_close($ch);
return $content;
}
при multipart-post-e вместо переменной $post_data используй просто массив, как и было у тебя
$pa=array(
"pn"=>"ZWU5d2Utd1pJ",
"domain"=>"dombimbom");
$content = curlPOST($pa, "http://www.google.com/1", "http://www.google.com/", $data['cookie_file'] , $data['proxy'], 60, 1); |
| 14.08.2009, 07:30 | Barbados | и еще проверь не меняется ли параметр "pn"=>"ZWU5d2Utd1pJ", возможно его просто нужно парсить и подставлять каждый раз в пост |
| 14.08.2009, 12:59 | kavopero | Barbados большое спасибо за помощь, сделал как ты посоветовал с функциями, но теперь пустая страница возвращается, эх:( |
| 14.08.2009, 13:42 | azgard | скинь ссылку где это буйство происходит , сделаю |
| 21.08.2009, 11:55 | Дикс | есть такой запрос:
POST /a-myljpost/ HTTP/1.1
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.13) Gecko/2009073022 MRA 5.5 (build 02746) Mozilla/4.0 (compatible; MSIE 7.0b; FuckBulleting Windows NT 5.2)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ru,en-us;q=0.7,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Cookie: randomhit=371890545; __utma=169734460.2664029598841237000.1250059683.12 50145383.1250835280.7; __utmz=169734460.1250059683.1.1.utmcsr=(direct)|ut mccn=(direct)|utmcmd=(none); __utmc=169734460; session=FE5E2CE390A0EDA6AE879F3F8BBC
Content-Type: multipart/form-data; boundary=---------------------------54363239114604
Content-Length: 1464
-----------------------------54363239114604
Content-Disposition: form-data; name="tagcount"
0
-----------------------------54363239114604
Content-Disposition: form-data; name="ffont"
0
-----------------------------54363239114604
Content-Disposition: form-data; name="fcolor"
0
-----------------------------54363239114604
Content-Disposition: form-data; name="fsize"
0
-----------------------------54363239114604
Content-Disposition: form-data; name="d"
1
-----------------------------54363239114604
Content-Disposition: form-data; name="a"
myljpost
-----------------------------54363239114604
Content-Disposition: form-data; name="aa"
new
-----------------------------54363239114604
Content-Disposition: form-data; name="s"
-----------------------------54363239114604
Content-Disposition: form-data; name="message"
dfgsdf
-----------------------------54363239114604
Content-Disposition: form-data; name="addfile"; filename=""
Content-Type: application/octet-stream
-----------------------------54363239114604
Content-Disposition: form-data; name="rub"
0
-----------------------------54363239114604
Content-Disposition: form-data; name="vstat"
0
-----------------------------54363239114604
Content-Disposition: form-data; name="music"
-----------------------------54363239114604
Content-Disposition: form-data; name="Submit"
??N???N??°????N?N?
-----------------------------54363239114604--
создал массив
$opts = array();
$opts['tagcount'] = 0;
$opts['ffont'] = 0;
$opts['fcolor'] = 0;
$opts['fsize'] = 0;
$opts['d'] = 1;
$opts['a'] = 'myljpost';
$opts['aa'] = 'new';
$opts['s'] = '';
$opts['message'] = time();
$opts['addfile'] = '';
//Content-Disposition: form-data; name="addfile"; filename=""
//Content-Type: application/octet-stream
$opts['rub'] = 0;
$opts['vstat'] = 0;
$opts['music'] = '';
$opts['Submit'] = '';
и отправляю curl
CURLOPT_POSTFIELDS, $opts
но сервер не размещает отправленное сообщение
просто возвращает 200 OK и ту же страницу
что здесь может быть не так?
всю тему прочитал, так и не понял в чем проблемы были у других |
| 21.08.2009, 12:15 | kavopero | всю тему прочитал, так и не понял в чем проблемы были у других
в кукисах
А почему у тебя $opts['Submit'] = ''; пустая? |
| 21.08.2009, 14:28 | qbec | $opts['addfile'] = '';
//Content-Disposition: form-data; name="addfile"; filename=""
//Content-Type: application/octet-stream
$opts['Submit'] = '';
$opts['Submit'] = 'сохранить'; тут видно какое-то русское слово, типо сохранить, в хтмл посмотри.
$opts['addfile'] = ''; курл для этой строчки думаю делает просто:
-----------------------------54363239114604
Content-Disposition: form-data; name="addfile"
а надо:
Content-Disposition: form-data; name="addfile"; filename=""
Content-Type: application/octet-stream
Тоесть нужно передавать файл, а с не заполненным значением файла остается загадкой как отправить запрос(для меня). |
| 04.09.2009, 09:01 | gcc | Тоесть нужно передавать файл, а с не заполненным значением файла остается загадкой как отправить запрос(для меня).
решил?
тоже не знаю как слать
Content-Disposition: form-data; name="file[upload]"; name=""
Content-Type: application/octet-stream |
| 04.09.2009, 19:51 | gcc | если слать вот так
'file[upload]' => "@111.txt",
или
'file[upload]' => "@",
то вообще ничего не отдает, ни 200 ни ошибки
как дебажить хз :) |
| 04.09.2009, 19:54 | pina | а если пустым отправить? |
| 04.09.2009, 19:55 | gcc | то сервер отвечает 200, но пост не отправляется говорит невалидно
интересно почему при @ курл вообще ничего не отвечает |
| 04.09.2009, 19:59 | pina | $opts['Submit'] = 'сохранить'; тут видно какое-то русское слово, типо сохранить, в хтмл посмотри.
$opts['addfile'] = ''; курл для этой строчки думаю делает просто:
-----------------------------54363239114604
Content-Disposition: form-data; name="addfile"
а надо:
Content-Disposition: form-data; name="addfile"; filename=""
Content-Type: application/octet-stream
Тоесть нужно передавать файл, а с не заполненным значением файла остается загадкой как отправить запрос(для меня).
При отправке POST запросом курл не формирует Content-Disposition & Content-Type, а отправляет обычную строку filed_name1=filed_value1&filed_name2=filed_value2 и т.д.
to gcc
ты как отправляешь? обычный POST? Ну типа :
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); ? |
| 04.09.2009, 20:04 | gcc | $userinfo = array(
'ururu' => '123',
'arara' => '321',
'files[upload]' => "@111.txt" // вот тут хз как слать, ошибка видимо в этом
);
$ch1 = curl_init();
curl_setopt($ch1, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch1, CURLOPT_TIMEOUT, 60);
curl_setopt($ch1, CURLOPT_URL, "http://url.com");
curl_setopt($ch1, CURLOPT_POST, 1);
curl_setopt($ch1, CURLOPT_POSTFIELDS, $userinfo);
curl_setopt($ch1, CURLOPT_COOKIE, $finalcook);
curl_setopt($ch1, CURLOPT_USERAGENT, "User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0");
curl_setopt($ch1, CURLOPT_RETURNTRANSFER, 0);
curl_setopt($ch1, CURLOPT_HEADER, 1);
$res1 = curl_exec($ch1);
curl_close($ch1);
все перекопал, в ключе про имя файла ошибка должна быть
вот в таком виде - курл вообще ничего не говорит мне,
если скажем поменять на
'files[upload]' => '',
то курл отдает мне хедеры и контент, но не постит выдает ошибку валидации движок сайта |
| 04.09.2009, 20:12 | pina | Есть такие сайты которым только мультипарт подавай, в принципе большинство обычным пост запросом наедается)
Вот таким макаром попробуй. Хаотично, тут же писал) не проверял, но в принципе должно работать
$bound = 'tralalala'; //replace rand str
$headers[]='Content-Type: multipart/form-data; boundary=---------------------------'.$bound;
$userinfo = array(
'ururu' => '123',
'arara' => '321'
);
$files = array(
'files[upload]'=>''
);
$request_data = array();
foreach ($userinfo as $name=>$value)
{
$request_data[]='-----------------------------'.$bound;
$request_data[]='Content-Disposition: form-data; name="'.$name.'"';
$request_data[]='';
$request_data[]=$value;
}
foreach ($files as $name=>$path)
{
$file_type='application/octet-stream';
$file_content=file_get_contents($path);
$request_data[]='-----------------------------'.$bound;
$request_data[]='Content-Disposition: form-data; name="'.$name.'"; filename="'.$file_name.'"';
$request_data[]='Content-Type: '.$file_type;
$request_data[]='';
$request_data[]=$file_content;
}
$request_data[]='-----------------------------'.$bound.'--';
$request_data[]='';
$request_data_ready=join("\r\n", $request_data);
$ch1 = curl_init();
curl_setopt($ch1, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch1, CURLOPT_TIMEOUT, 60);
curl_setopt($ch1, CURLOPT_URL, "http://url.com");
curl_setopt($ch1, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch1, CURLOPT_POST, 1);
curl_setopt($ch1, CURLOPT_POSTFIELDS, $request_data_ready);
curl_setopt($ch1, CURLOPT_COOKIE, $finalcook);
curl_setopt($ch1, CURLOPT_USERAGENT, "User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0");
curl_setopt($ch1, CURLOPT_RETURNTRANSFER, 0);
curl_setopt($ch1, CURLOPT_HEADER, 1);
$res1 = curl_exec($ch1);
curl_close($ch1); |
| 04.09.2009, 20:14 | gcc | омг, еще надо content lenght тогда отправлять по идее тогда? |
| 04.09.2009, 20:15 | gcc | а вообще ад какой то |
| 04.09.2009, 20:16 | pina | можно, но не всегда обязательно |
| 04.09.2009, 20:25 | gcc | по твоему варианту не работает
ошибки валидации теперь нет, отвечает 200 (должно быть по идее 302), ниче не постит .
и почему то мне кажется что есть другой вариант |
| 04.09.2009, 20:26 | pina | у тебя ведь автоматическое перенаправление... не? |
| 04.09.2009, 20:29 | gcc | да уже и отключал и включал его
как бы поснифать что курл отправляет? |
| 04.09.2009, 20:35 | pina | тада хз) на скрипт бы глянуть, возможно что то бы прояснилось |
| 04.09.2009, 20:37 | gcc | вообще надо бы вернуться к нашим баранам и вспомнить какой вопрос я задал изначально:
как слать без костылей такое:
-----------------------------112581211315693
Content-Disposition: form-data; name="files[upload]"; filename=""
Content-Type: application/octet-stream
за остальной код я впринципе уверен железно |
| 04.09.2009, 20:41 | pina | ты заголовки через HttpHeadres от лисы смотришь?
вот попробуй запустить скрипт и перед
$ch1 = curl_init();
сделать такое:
print '<pre>';
print $request_data_ready;
exit;
И сравни с "оригиналом", который показывает лиса |
| 04.09.2009, 20:50 | gcc | в твоем примере
$headers[]='Content-Type: multipart/form-data; boundary=---------------------------112581211315693';
а их то не отсылаем нигде
посмотрел, все отлично, не хватает только
Content-Type: multipart/form-data; boundary=---------------------------112581211315693
Content-Length: 1631
вначале
как лучше $headers послать? |
| 04.09.2009, 20:52 | pina | та ну нах
curl_setopt($ch1, CURLOPT_HTTPHEADER, $headers); |
| 04.09.2009, 20:56 | gcc | неа, Validation error, надо в $request_data_ready засунуть видимо |
| 04.09.2009, 20:57 | pina | Validation error
курла или движка? |
| 04.09.2009, 20:58 | gcc | движка |
| 04.09.2009, 21:00 | pina | у тебя $bound меняется? эта переменная каждый раз должна быть максимально уникальной |
| 04.09.2009, 21:02 | gcc | аэээ, там вообщем если баундари отсюда
Content-Type: multipart/form-data; boundary=---------------------------112581211315693
такой же как в ключах массива, то вылазит
Validation error
если другой, то ошибки нет, но и не постит ничего
ответ в обоих случаях 200 |
| 04.09.2009, 21:03 | gcc | не, то что отснифал фаерфоксом, там у всех ключей он одинаковый
бред какой то |
| 04.09.2009, 21:05 | pina | boundary должна менятся при каждом запросе
если другой, то ошибки нет, но и не постит ничего
а ты еще раз ответ сервера посмотри, т.е. хтмл документ, любят JS редиректить на новый пост... если это не поможет то я бессилен) |
| 04.09.2009, 21:05 | gcc | склоняюсь к мнению что надо везде оставить одинаковый
и сидеть считать content lenght |
| 04.09.2009, 21:07 | gcc | только что проверил без JS
все круто запостилось, всмысле через браузер
Content-Type: multipart/form-data; boundary=---------------------------241681333820307
и дальше то же самое число везде |
| 04.09.2009, 21:09 | pina | и сидеть считать content lenght
зачем же считать?) так попробуй
$content_len=strlen($request_data_ready);
$headers[]="Content-Length: ".$content_len; |
| 04.09.2009, 21:15 | gcc | ну я примерно это и имел ввиду :)
Validation error
хз, пойти что ли курить CURLINFO_HEADER_OUT и CURLOPT_DEBUGFUNCTION
надо смотреть что курл отправляет |
| 04.09.2009, 21:17 | pina | блиа да как так то! быть такого не может!
запости код который ты щас теребишь. |
| 04.09.2009, 21:19 | gcc | Content-Type: multipart/form-data; boundary=---------------------------112581211315693 Content-Length: 1505 Expect: 100-continue "
и молчит |
| 04.09.2009, 21:19 | qbec | решил?
тоже не знаю как слать
Долго искал, потом забил. Но недавно гдето прочитал (но не тестил еще) что в массиве обязательно нужно указывать @ чтобы курл понимал что это файл, что файл пустой нужно толи "@''" ,толи фопен несуществующего файла делать и подставлять его.
При отправке POST запросом курл не формирует Content-Disposition & Content-Type, а отправляет обычную строку filed_name1=filed_value1&filed_name2=filed_value2 и т.д.
Курл формирует "обычную строку" если ему отдавать не массив, если отдавать массив все он формирует. |
| 04.09.2009, 21:20 | gcc | да я уже нашел как отснифать
curl_setopt($ch1, CURLINFO_HEADER_OUT, true);
$res1 = curl_exec($ch1);
var_dump(curl_getinfo($ch1,CURLINFO_HEADER_OUT));
curl_close($ch1);
он ответил
string(387) "POST /add HTTP/1.1 User-Agent: User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0 Host: google.com Accept: */* Referer: http://google.com Cookie: 123=321 Content-Type: multipart/form-data; boundary=---------------------------112581211315693 Content-Length: 1505 Expect: 100-continue " |
| 04.09.2009, 21:29 | gcc | хуй знает че теперь делать |
| 04.09.2009, 21:41 | pina | http://bugs.caucho.com/view.php?id=3282
работает :pardon:
ну я как бы выложил свою реализацию мультипарт передачи
так что gcc делай как выше сказал qbec и усе будет ОК) |
| 04.09.2009, 21:50 | gcc | новости с фронта
проверил, если дать массив, действительно шлет мультипартом автоматически
но блядь не постится ничего, ибо если сделать
'files[upload]' => "@",
то курл дебаг говорит что я шлю не стринг с хедерами, а bool(false)
дурдом |
| 04.09.2009, 22:10 | gcc | не, на сокетах точно писать не буду |
| 04.09.2009, 22:28 | qbec | Скинул бы ты часть кода с логином(если требуется авторизация) и твоим запросом для постинга, я бы тоже с удовольствием помучался с курлом. |
| 04.09.2009, 22:31 | gcc | да такой код стыдно показывать честно говоря
я нуб, только начинаю учиться
если сильно смеяться не будешь то стукни 373-936-868 |
| 06.09.2009, 17:42 | kerry | такая же проблема, не поститься картинка при постинге wp. Привожу кусок кода :write::
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, array('image' => '@avatar.gif',
'post_title' => 'dadu',
'post_content' => 'duda',
'from_tab' => 'upload',
'action' => 'upload',
'post_id' => $post_ID,
'_wpnonce' => $_wpnonce,
'_wp_http_referer' => "http://xxx.com/wp-admin/upload.php?style=inline&tab=upload&post_id=".$post_ID."&_wpnonce=".$_wpnonce."&ID&action&paged",
'submit' => 'Yes'));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie);
$result = curl_exec($ch);
echo $result;
HttpFox при отправке вручную говорит следующее:
image filename="avatar.gif" Content-Type: image/gif
post_title 11111
post_content 2
from_tab upload
action upload
post_id -1252244754
_wpnonce 23a6f79fbe
_wp_http_referer /wp-admin/upload.php?style=inline&tab=upload&post_id=-1252244754&_wpnonce=23a6f79fbe
(Request-Line) POST /wp-admin/upload.php?style=inline&tab=upload&post_id=-1252244754 HTTP/1.1
Host xxx.com
User-Agent Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.5) Gecko/2008120122 Firefox/3.0.5 WebMoney Advisor
Accept text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language ru,en-us;q=0.7,en;q=0.3
Accept-Encoding gzip,deflate
Accept-Charset windows-1251,utf-8;q=0.7,*;q=0.7
Keep-Alive 300
Connection keep-alive
Referer http://xxx.com/wp-admin/upload.php?style=inline&tab=upload&post_id=-1252244754&_wpnonce=23a6f79fbe
Cookie __utma=192671155.869432844959502100.1238351258.124 7995822.1249151952.8; __utmz=192671155.1238351258.1.1.utmcsr=(direct)|ut mccn=(direct)|utmcmd=(none); dbx-postmeta=grabit:0+|1-|2-|3-|4-|5-&advancedstuff:0-|1-|2-; dbx-pagemeta=grabit:0-|1-|2-|3-|4-|5-|6-&advancedstuff:0-; __utma=250040836.1286413075.1246075409.1247235355. 1247669391.7; __utmz=250040836.1247235355.6.4.utmccn=(referral)| utmcsr=xxx.com|utmcct=/wp-admin/index.php|utmcmd=referral; wordpressuser=belka; wordpresspass=2ebd61a8f2a538c69fb4f4e2e7bac5da
Content-Type multipart/form-data; boundary=---------------------------26681719213985
Content-Length 3043
Помогите разобраться, пожалуйста:) |
| 18.04.2010, 10:31 | sensey | Content-Type=multipart/form-data; boundary=---------------------------хххххххххххххх
а я так и не понял, откуда эту штуку вытащить...... |
| 18.04.2010, 11:35 | kalombo | Придумать любую, это просто разделитель. |
| 18.04.2010, 13:13 | sensey | Придумать любую, это просто разделитель.
спасибо, полегчало...
а как составить пост запрос из этого?
POSTDATA =-----------------------------23805158906729
Content-Disposition: form-data; name="__VIEWSTATE"
$code
-----------------------------23805158906729
Content-Disposition: form-data; name="toUserID"
244964843
-----------------------------23805158906729
Content-Disposition: form-data; и т.д.
Предположительно надо делать так (извиняюсь зак kривоту рук)
$boundary = rand (10000000000000, 30000000000000);
$postdata = "-----------------------------$boundary";
$postdata_array = array(
"__VIEWSTATE" => "$code-----------------------------$boundary",
"toUserID" => "$id-----------------------------$boundary"); и т.д.
как правильно объединить запрос в один? куда писать \r\n
и надо ли это? |
| 21.04.2010, 14:27 | sensey | $post_data = array('__VIEWSTATE'=>$code,
'toUserID'=>$id,
'hdnInboxID'=>'',
'hdnFromUserID'=>'',
'hdnFromProfile'=>'true',
'hdnWink'=>'',
'hdnCfid'=>'',
'hdnCvpn'=>'',
'hdnLhZip'=>'',
'hdnLhUsername'=>'',
'hdnForumID'=>'',
'hdnStartAt'=>'',
'hdnIsContact'=>'False',
'txtTo'=>$name,
'txtSubject'=>$title,
'Mood'=>'rdNone',
'txtBody'=>$body,
'file'=>'', # 'file' => "@/full/path/to/file.txt",
'btnSend2'=>'Send Message');
писано не мной, но работает....
был такой запрос в тампер дата
POSTDATA =-----------------------------974127529778
Content-Disposition: form-data; name="__VIEWSTATE"
$code
-----------------------------974127529778
Content-Disposition: form-data; name="toUserID"
$id
-----------------------------974127529778
Content-Disposition: form-data; name="hdnInboxID"
-----------------------------974127529778
Content-Disposition: form-data; name="hdnFromUserID"
-----------------------------974127529778
Content-Disposition: form-data; name="hdnFromProfile"
true
-----------------------------974127529778
Content-Disposition: form-data; name="hdnWink"
-----------------------------974127529778
Content-Disposition: form-data; name="hdnCfid"
-----------------------------974127529778
Content-Disposition: form-data; name="hdnCvpn"
-----------------------------974127529778
Content-Disposition: form-data; name="hdnLhZip"
-----------------------------974127529778
Content-Disposition: form-data; name="hdnLhUsername"
-----------------------------974127529778
Content-Disposition: form-data; name="hdnForumID"
-----------------------------974127529778
Content-Disposition: form-data; name="hdnStartAt"
-----------------------------974127529778
Content-Disposition: form-data; name="hdnIsContact"
False
-----------------------------974127529778
Content-Disposition: form-data; name="txtTo"
$name
-----------------------------974127529778
Content-Disposition: form-data; name="txtSubject"
$title
-----------------------------974127529778
Content-Disposition: form-data; name="Mood"
rdNone
-----------------------------974127529778
Content-Disposition: form-data; name="txtBody"
$body
-----------------------------974127529778
Content-Disposition: form-data; name="file"; filename=""
Content-Type: application/octet-stream
-----------------------------974127529778
Content-Disposition: form-data; name="btnSend2"
Send Message
-----------------------------974127529778--
но и с файлом думаю все получится |
| 20.06.2010, 15:36 | mumi | $referer='https://domain.com/my_account/my_account_manage_domain.php?dn='.$dn.'&edit';
$array = array(
'pn'=>$pn,
'domain'=>$domain,
'MAX_FILE_SIZE'=>'1048576',
'service_type'=>'dns',
'service_type_radio'=>'on',
'ns_host[0]'=>$ns1,
'ns_host[1]'=>$ns2,
'ns_host[2]'=>'',
'ns_host[3]'=>'',
'ns_host[4]'=>'',
'button'=>'Set up',
'record_host'=>'',
'ttl'=>'86400',
'record_type'=>'',
'record_priority'=>'',
'record_value'=>'',
'site_url'=>'',
'site_title'=>'',
'frame'=>'3',
'site_description'=>'',
'search_keyword'=>'',
'google_email_cname_host'=>'',
);
//$bound = md5(uniqid(time()));
$bound = rand(10000000000000,99999999999999);
$request_data = array();
foreach ($array as $name=>$value)
{
$request_data[]='-----------------------------'.$bound;
$request_data[]='Content-Disposition: form-data; name="'.$name.'"';
$request_data[]='';
$request_data[]=$value;
}
$request_data[]='-----------------------------'.$bound.'--';
$request_data[]='';
$request_data_ready=join("\r\n", $request_data);
$content_len=strlen($request_data_ready);
$head=array(
'User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3 GTB7.1',
'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language: ru-RU,ru;q=0.9,en;q=0.8',
'Accept-Encoding: gzip,deflate',
'Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7',
'Keep-Alive: 115',
'Connection: Keep-Alive',
'Referer: '.$referer.'',
'Content-Type: multipart/form-data; boundary=---------------------------'.$bound.'',
'Content-Length: '.$content_len.'',
);
$ch1 = curl_init("https://domain.com/my_account/my_account_manage_domain_edit_proc.php");
curl_setopt($ch1, CURLOPT_FOLLOWLOCATION, 0);
curl_setopt($ch1, CURLOPT_TIMEOUT, 60);
curl_setopt($ch1, CURLOPT_HTTPHEADER, $head);
curl_setopt($ch1, CURLOPT_POST, 1);
curl_setopt($ch1, CURLOPT_COOKIEFILE, 'cookie.txt');
curl_setopt($ch1, CURLOPT_COOKIEJAR, 'cookie.txt');
curl_setopt($ch1, CURLOPT_POSTFIELDS, $request_data_ready);
curl_setopt($ch1, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch1, CURLOPT_HEADER, 1);
curl_setopt($ch1, CURLINFO_HEADER_OUT, true);
$edit2 = curl_exec($ch1);
var_dump(curl_getinfo($ch1,CURLINFO_HEADER_OUT));
curl_close($ch1);
хедеры
string(832) "POST /my_account/my_account_manage_domain_edit_proc.php HTTP/1.1 Host: domain.com Cookie: co_cc_P=TVNERENCQ2hI; co_cc_EMAIL=d21pemV2bWh2bGJAZ21haWwuY29t; PHPSESSID=3c1e206abc55f04748a4dbe1d6ee8385; cun=R0FWQUFWWExWMg%3D%3D; ip_76_76_100_66=CA; co_cc_LT=OExOMzhYMzNOVktm User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3 GTB7.1 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: ru-RU,ru;q=0.9,en;q=0.8 Accept-Encoding: gzip,deflate Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7 Keep-Alive: 115 Connection: Keep-Alive Referer: https://domain.com/my_account/my_account_manage_domain.php?dn=Ymdna2ZjbXBR&edit Content-Type: multipart/form-data; boundary=---------------------------619321905 Content-Length: 2222 Expect: 100-continue "
а получаю в ответ что я мол не авторизирован, хотя использую етотже код, загружаю после етого другую страницу - все нормально, я авторизирован
Вроде и кука передается, и все оформил так как нужно... может вы увидете где ошибка может быть. |
Работает на vBulletin® версия 3.8.6. Copyright ©2000-2011, Jelsoft Enterprises Ltd. Перевод: zCarot
|