Отправка через post curl

iNFiNiTy

Создатель
Регистрация
11 Апр 2007
Сообщения
35
Реакции
2
пытаюсь обновить профиль на сайте через curl.
Авторизацию сделал, а вот с обновлением профиля проблемы, там данные на сервер передаются в таком виде:
HTML:
Content-Type: multipart/form-data; boundary=---------------------------179682735826031
Content-Length: 2815
-----------------------------179682735826031
Content-Disposition: form-data; name="userid"
4019
-----------------------------179682735826031
Content-Disposition: form-data; name="curpassword"
-----------------------------179682735826031
Content-Disposition: form-data; name="ruserhideemail"
1
-----------------------------179682735826031
Content-Disposition: form-data; name="ruserpmnotify"
0
-----------------------------179682735826031
Content-Disposition: form-data; name="ruserskin"
green
-----------------------------179682735826031
Content-Disposition: form-data; name="ruserlang"
ru
-----------------------------179682735826031
Content-Disposition: form-data; name="rusercountry"
au
-----------------------------179682735826031
Content-Disposition: form-data; name="ruserlocation"
-----------------------------179682735826031
Content-Disposition: form-data; name="rusertimezone"
+00
-----------------------------179682735826031
Content-Disposition: form-data; name="ruserwebsite"
-----------------------------179682735826031
Content-Disposition: form-data; name="ruserirc"
-----------------------------179682735826031
Content-Disposition: form-data; name="rusericq"
-----------------------------179682735826031
Content-Disposition: form-data; name="rusermsn"
-----------------------------179682735826031
Content-Disposition: form-data; name="ryear"
0
-----------------------------179682735826031
Content-Disposition: form-data; name="rmonth"
0
-----------------------------179682735826031
Content-Disposition: form-data; name="rday"
0
-----------------------------179682735826031
Content-Disposition: form-data; name="ruseroccupation"
-----------------------------179682735826031
Content-Disposition: form-data; name="rusergender"
U
-----------------------------179682735826031
Content-Disposition: form-data; name="MAX_FILE_SIZE"
102400000
-----------------------------179682735826031
Content-Disposition: form-data; name="userfile"; filename=""
Content-Type: application/octet-stream
-----------------------------179682735826031
Content-Disposition: form-data; name="MAX_FILE_SIZE"
8192000
-----------------------------179682735826031
Content-Disposition: form-data; name="userphoto"; filename=""
Content-Type: application/octet-stream
-----------------------------179682735826031
Content-Disposition: form-data; name="rusertext"
-----------------------------179682735826031
Content-Disposition: form-data; name="rnewpass1"
-----------------------------179682735826031
Content-Disposition: form-data; name="rnewpass2"
-----------------------------179682735826031
Content-Disposition: form-data; name="x"
C0CECD
-----------------------------179682735826031--
пытаюсь отправить запрос так
PHP:
post_send($host."/users.php?m=profile&a=update",$postdata);
$postdata=array(
'userid' => '4019',
'curpassword' => '',
....
'userphoto' => '',
'x' => 'C0CECD'
)
При отправке пишет WRONG URL и не обновляется. что я делаю не так? может у кого-то есть рабочий пример, а то я и так и этак, уже какой день (
 
Можно больше информации? Хотя бы функцию post_send увидеть. Можно в личку.
Кстати, это у вас и в коде так - сначала вызов функции, а потом объявление той переменной, которая в эту функцию передается?
Чему равна переменная $host до момента передачи ее в функцию post_send?
 
Возможно вас перенаправляет скрипт на другую страницу, а вы остаетесь на тойже куда и отсылаете.
Попробуйте вставить
Код:
curl_setopt($ch,FOLLOW_LOCATION,1);
 
Можно больше информации? Хотя бы функцию post_send увидеть. Можно в личку.
Кстати, это у вас и в коде так - сначала вызов функции, а потом объявление той переменной, которая в эту функцию передается?
Чему равна переменная $host до момента передачи ее в функцию post_send?
$postdata идет в начале функции post_send

PHP:
function post_send($url,$post){
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL,$url); // set url to post to 
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
	curl_setopt($ch, CURLOPT_HEADER, 0);
	curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 6.1; ru; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8");
	curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
	curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
	curl_setopt($ch, CURLOPT_ENCODING, "gzip,deflate");
	curl_setopt($ch,FOLLOW_LOCATION,1);
if( is_array( $post ) || strlen( $post ) > 1 ) {
		curl_setopt($ch, CURLOPT_POST, 1);
		curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
	}
//Настойка опций cookie
curl_setopt($ch, CURLOPT_COOKIEJAR, '/home/test1.ru/www/parser/cook.txt');//сохранить куки в файл
curl_setopt($ch, CURLOPT_COOKIEFILE, '/home/test1.ru/www/parser/cook.txt');//считать куки из файла 
$result = curl_exec($ch); // run the whole process 
curl_close($ch);  
return $result; 
}
Да Вы правы там идет перенаправление когда профиль обновился (показывает сообщение об успешном обновлении потом опять в профиль), но я поставил код:

PHP:
curl_setopt($ch,FOLLOW_LOCATION,1);

теперь выдает ошибку
HTML:
Warning: curl_setopt() expects parameter 2 to be long, string given in Z:\home\test1.ru\www\parser\index.php on line 90
 
CURLOPT_FOLLOWLOCATION а не FOLLOW_LOCATION
 
спасибо. но результат тотже (вернее ни какого), профиль не обновляется.
 
1) покажи что в переменной $url хранится.
2) в CURLOPT_POSTFIELDS попробуй передавать строку,а не массив. Строка вида ключ1=значение&ключ2=значение2...и т.д.
3) проверь, совпадают ли названия полей в html-коде страницы с ключами в твоем post-запросе.
4) curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
вот это для чего тебе?
 
спасибо. но результат тотже (вернее ни какого), профиль не обновляется.
Вот рабочий код вашей авторизации на сайте
PHP:
<?php 
$co=ex_curl('http://site.ru/users.php?m=auth&a=check&redirect=',false,true,NULL,'rusername=pastern2&rpassword=232323&rcookiettl=0&x=GUEST', 'http://site.ru/users.php?m=auth');
$c = get_cookie($co);
$co=ex_curl('http://site.ru/message.php?msg=104&redirect=',true,true,NULL,'', 'http://site.ru/users.php?m=auth');
sleep(2);
$co=ex_curl('http://site.ru/index.php',true,false,$c, '', 'http://site.ru/users.php?m=auth&a=check&redirect=');
//Сейчас нужные нам куки в переменной $c, а контент текущей страницы в переменной $co
die();

function ex_curl($url,$get=true,$headers=false,$cookie=NULL,$fields=NULL,$referrer=NULL){
	$ch=curl_init($url);
	curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
	curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE);
	curl_setopt($ch,CURLOPT_ENCODING,'gzip, deflate');
	curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 6.1; ru; rv:1.9.2) Gecko/20100115 Firefox/3.6');
	curl_setopt($ch,CURLOPT_FOLLOWLOCATION,0);

	if(!$get){
		curl_setopt($ch,CURLOPT_POST,1);
		curl_setopt($ch,CURLOPT_POSTFIELDS,$fields);
	}

	if($cookie!='') {
		curl_setopt($ch,CURLOPT_COOKIE,$cookie);
		curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie);
	}
	if($headers) curl_setopt($ch,CURLOPT_HEADER,1);
	if($referrer!='') curl_setopt($ch,CURLOPT_REFERER,$referrer);
	curl_setopt($ch, CURLINFO_HEADER_OUT, true);
	curl_setopt($ch, CURLOPT_HTTPHEADER, array('Expect:'));
	curl_setopt($ch, CURLINFO_HEADER_OUT, true);
	$rt = curl_exec($ch);
	curl_close($ch);
	return $rt;
}

function get_cookie($ch){
	preg_match_all('/Set-Cookie: (.*)/m',$ch,$ch);
	for($i=0;$i<count($ch[1]);$i++)
	{
		$co.=trim($ch[1][$i]).'; ';
	}
	$c = substr(trim($co),0,-1);
	return $c;
}
?>
 
1) покажи что в переменной $url хранится.
$host="http://www.test.ru";

2) в CURLOPT_POSTFIELDS попробуй передавать строку,а не массив. Строка вида ключ1=значение&ключ2=значение2...и т.д.

пробывал тоже так
3) проверь, совпадают ли названия полей в html-коде страницы с ключами в твоем post-запросе.

проверил не сколько раз.

4) curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);

для уверенности.

Сейчас stealthdebuger помогает ... пытаемся разобраться, за что огромное спасибо.
 
Вопрос решен, проблема была в неверной попытке отправить данные при Content-Type=multipart/form-data
 
Назад
Сверху