PDA

Просмотр полной версии : почему через сокеты я получаю куки, а через curl нет?


Дикс
23.05.2009, 22:29
отправляю запрос курлом:


$options = array(
CURLOPT_VERBOSE => 1,
CURLOPT_POST => 1, // method POST
CURLOPT_HEADER => 1, // show headers
CURLOPT_NOBODY => 0, // disable body
CURLOPT_POSTFIELDS => array(
'mode' => 'login',
'chal' => 'c0:1216468800:2495:300:E7hQqy7D7SSujymYaT2h:b3884 4ffa11fdf08d87fc4812788a686',
'response' => '',
'user' => 'user',
'password' => 'pass',
'_submit' => 'Login',
'remember_me' => 1

), // post data
CURLOPT_FOLLOWLOCATION => 1,
CURLOPT_RETURNTRANSFER => 1, // return response
CURLOPT_SSL_VERIFYPEER => 0, // verify ssl sertificat
CURLOPT_USERAGENT => 'User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; SV1; MRA 4.9 (build 01863))',
CURLOPT_TIMEOUT => 30
);

$process = curl_init('www.site.ru');
curl_setopt_array($process, $options);
$return = curl_exec($process);
curl_close($process);


получаю:


HTTP/1.0 200 OK
Date: Sat, 23 May 2009 18:20:08 GMT
Server: Apache
Set-Cookie: ljuniq=pQGivU2aBITGvBS:1243102808:pgstats0:m0; expires=Wednesday, 22-Jul-2009 18:20:08 GMT; domain=.livejournal.com; path=/
Cache-Control: private, proxy-revalidate
Pragma: no-cache
ETag: "8e941582721e88255b1cfe10285253f4"
Content-length: 18537
Keep-Alive: timeout=30, max=100
Connection: keep-alive
Content-Type: text/html; charset=utf-8
Content-Language: en
Expires: Sat, 23 May 2009 18:20:08 GMT


всего ОДНА кука.

А если отправить через сокеты:


$content = "mode=login&chal=c0:1216468800:2495:300:E7hQqy7D7SSujymYaT2h:b 38844ffa11fdf08d87fc4812788a686&response=&";
$content .= "user=user&password=pass&_submit=Login&remember_me=1";

$req = "POST /login.bml?ret=1 HTTP/1.0\r\n";
$req .= "Accept: */*\r\n";
$req .= "Content-Type: application/x-www-form-urlencoded\r\n";
$req .= "Proxy-Connection: Keep-Alive\r\n";
$req .= "User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; SV1; MRA 4.9 (build 01863))\r\n";
$req .= "Host: www.livejournal.com\r\n";
$req .= "Content-Length: ".strlen($content)."\r\n";
$req .= "Pragma: no-cache\r\n\r\n";
$req .= $content;

$sock = fsockopen("www.livejournal.com", 80, $errno, $errstr, 30);


получаю:


HTTP/1.0 302 Found
Date: Sat, 23 May 2009 18:21:51 GMT
Server: Apache
Set-Cookie: ljuniq=nijPK3Xw7vMs8Dw:1243102911:pgstats0:m0; expires=Wednesday, 22-Jul-2009 18:21:51 GMT; domain=.livejournal.com; path=/
Set-Cookie: ljmastersession=v1:u19098670:s8:aEPBJHNrnvY//Thanks+for+signing+in+/+LiveJournal+loves+you+a+lot+/+Here+have+a+cookie; expires=Wednesday, 22-Jul-2009 18:21:51 GMT; domain=www.livejournal.com; path=/; HttpOnly
Set-Cookie: ljloggedin=u19098670:s8; expires=Wednesday, 22-Jul-2009 18:21:51 GMT; domain=livejournal.com; path=/; HttpOnly
Set-Cookie: ljloggedin=u19098670:s8; expires=Wednesday, 22-Jul-2009 18:21:51 GMT; domain=.livejournal.com; path=/; HttpOnly
Set-Cookie: BMLschemepref=horizon; expires=Wednesday, 22-Jul-2009 18:21:51 GMT; domain=livejournal.com; path=/; HttpOnly
Set-Cookie: BMLschemepref=horizon; expires=Wednesday, 22-Jul-2009 18:21:51 GMT; domain=.livejournal.com; path=/; HttpOnly
Set-Cookie: langpref=ru/1243102911; expires=Wednesday, 22-Jul-2009 18:21:51 GMT; domain=livejournal.com; path=/; HttpOnly
Set-Cookie: langpref=ru/1243102911; expires=Wednesday, 22-Jul-2009 18:21:51 GMT; domain=.livejournal.com; path=/; HttpOnly
Set-Cookie: ljsession=v1:u19098670:s8:t1243101600:g6f5817c274a 95201caedc323f200c8af30ada182//Thanks+for+signing+in+/+LiveJournal+loves+you+a+lot+/+Here+have+a+cookie; expires=Wednesday, 22-Jul-2009 18:21:51 GMT; domain=livejournal.com; path=/; HttpOnly
Set-Cookie: ljsession=v1:u19098670:s8:t1243101600:g6f5817c274a 95201caedc323f200c8af30ada182//Thanks+for+signing+in+/+LiveJournal+loves+you+a+lot+/+Here+have+a+cookie; expires=Wednesday, 22-Jul-2009 18:21:51 GMT; domain=.livejournal.com; path=/; HttpOnly
Location: http://www.livejournal.com/
Connection: close
Content-Type: text/html; charset=iso-8859-1



при этом CURLOPT_FOLLOWLOCATION вообще ничего не решает. ответы сервера разные, сокетам он говорит "document moved here", а курлу - "username not found"

Дикс
23.05.2009, 22:37
хотя щас выяснилось что если передать не

CURLOPT_POSTFIELDS => array(
"mode" => "login",
"chal" => "c0:1216468800:2495:300:E7hQqy7D7SSujymYaT2h:b38844 ffa11fdf08d87fc4812788a686",
"response" => "",
"user" => {$user},
"password" => {$password},
"_submit" => "Login",
"remember_me" => "1",

),


а


CURLOPT_POSTFIELDS => "mode=login&chal=c0:1216468800:2495:300:E7hQqy7D7SSujymYaT2h:b 38844ffa11fdf08d87fc4812788a686&response=&user={$user}&password={$password}&_submit=Login&remember_me=1",


ответ у курла, такой же как и у сокетов..

Дикс
23.05.2009, 23:14
тема неактуальна

GreenBear
23.05.2009, 23:22
"user" => {$user},
"password" => {$password},
wth?

Doom123
24.05.2009, 18:23
Если кому нибудь интересен ответ то вот
https://forum.antichat.ru/showpost.php?p=1222758&postcount=2

Дикс
25.05.2009, 11:17
эээ
а как у меня в другом скрипте работает-то с массивом пост-полей??
сначала юзал curl_set_opt(), потом увидел подсказку что можно всё массивом скинуть
а теперь оказывается что массив туда нельзя =\

Дикс
25.05.2009, 11:17
Все дело в том, в каком виде передается этот пост. Если передавать курлу массив, то передача кодируется, как multipart/form-data. А при строке - application/x-www-form-urlencoded.
точно, спасибо