GoFuckBiz.info
Форум успешных вебмастеров - GoFuckBiz.info
SEO · трафик · партнерские программы

   Форум успешных вебмастеров - GoFuckBiz.info > Бизнес-решения > Скрипты, программы и технические решения > curl multipart/form-data

Просмотр полной версии : curl multipart/form-data

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, 18:12
gcc
up^
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, 21:57
Юнга
php
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