Проблема с авторизацией через guzzle

425
15 марта 2017, 20:11

Все привет!
Пытаюсь сделать авторизацию через guzzle для olx, но почему-ту в результате объекта $response, нужных кук - нет. Самое странное что в логах эти cookie - есть. Еще странная вещь - в логах видно что запрос-ответ выполняется два раза:
В первый раз: видно что, клиент успешно обращается к серверу и сервер успешно возвращает куки авторизации(которые мне нужны).
Во второй раз: видно что, клиент успешно обращается к серверу и сервер успешно возвращает ответ, но уже без нужных мне кук.
Может я просто не до конца понимаю как работает http.
Мне нужны вот эти куки:

< Set-Cookie: PHPSESSID=osidpt9e5v9osb4u393uogcgm7; path=/; domain=.olx.kz; secure; HttpOnly
< Set-Cookie: PHPSESSID=bneuripfur13d87pdpfq4mls65; path=/; domain=.olx.kz; secure; HttpOnly
< Set-Cookie: user_id=50707354; path=/; domain=.olx.kz
< Set-Cookie: remember_login=50707354%3A1490682715%3B891f5cccc163c6ea5e5e5d96918b8c25; expires=Tue, 28-Mar-2017 06:31:55 GMT; Max-Age=1209600; path=/; domain=.olx.kz; secure; HttpOnly

А получаю только:

< Set-Cookie: PHPSESSID=mp6ls3a87t7trsovmbgll6ten5; path=/; domain=.olx.kz; secure; HttpOnly
< Set-Cookie: mobile_default=desktop; path=/; domain=.olx.kz; secure

Лог:

* Hostname www.olx.kz was found in DNS cache
*   Trying 10.10.10.10...
* Connected to www.olx.kz (10.10.10.10) port 443 (#0)
* ALPN, offering http/1.1
* Cipher selection: ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH
* successfully set certificate verify locations:
*   CAfile: /etc/ssl/certs/ca-certificates.crt
  CApath: /etc/ssl/certs
* SSL connection using TLSv1.2 / ECDHE-RSA-AES256-GCM-SHA384
* ALPN, server accepted to use http/1.1
* Server certificate:
*    subject: jurisdictionC=NL; businessCategory=Private Organization; serialNumber=34243234; C=NL; ST=Hoofddorp; L=Hoofddorp; O=OLX B.V.; OU=Technical Department; CN=ev.horizontals.eu.certificates.naspersclassifieds.com
*    start date: Sep  2 00:00:00 2016 GMT
*    expire date: Sep  2 23:59:59 2018 GMT
*    subjectAltName: www.olx.kz matched
*    issuer: C=US; O=thawte, Inc.; CN=thawte EV SSL CA - G3
*    SSL certificate verify ok.
> POST /account/?ref%5B0%5D%5Baction%5D=myaccount&ref%5B0%5D%5Bmethod%5D=index HTTP/1.1
Host: www.olx.kz
Content-Type: application/x-www-form-urlencoded
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding: gzip, deflate, br
Accept-Language: ru,en-US;q=0.7,en;q=0.3
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:49.0) Gecko/20100101 Firefox/49.0
Content-Length: 105
* upload completely sent off: 105 out of 105 bytes
< HTTP/1.1 301 Moved Permanently
< Location: https://www.olx.kz/myaccount/
< X-B: olxkz-wrk04
< X-T: D=143444 t=1489473115037151
< Content-Length: 0
< Content-Type: text/html; charset=UTF-8
< Expires: Tue, 14 Mar 2017 06:31:55 GMT
< Cache-Control: max-age=0, no-cache, no-store
< Pragma: no-cache
< Date: Tue, 14 Mar 2017 06:31:55 GMT
< Connection: keep-alive
< Set-Cookie: PHPSESSID=osidpt9e5v9osb4u393uogcgm7; path=/; domain=.olx.kz; secure; HttpOnly
< Set-Cookie: PHPSESSID=bneuripfur13d87pdpfq4mls65; path=/; domain=.olx.kz; secure; HttpOnly
< Set-Cookie: user_id=50707354; path=/; domain=.olx.kz
< Set-Cookie: remember_login=50707354%3A1490682715%3B891f5cccc163c6ea5e5e5d96918b8c25; expires=Tue, 28-Mar-2017 06:31:55 GMT; Max-Age=1209600; path=/; domain=.olx.kz; secure; HttpOnly
< 
* Connection #0 to host www.olx.kz left intact
* Found bundle for host www.olx.kz: 0x55fa40894100 [can pipeline]
* Re-using existing connection! (#0) with host www.olx.kz
* Connected to www.olx.kz (10.10.10.10) port 443 (#0)
> GET /myaccount/ HTTP/1.1
Host: www.olx.kz
Content-Type: application/x-www-form-urlencoded
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding: gzip, deflate, br
Accept-Language: ru,en-US;q=0.7,en;q=0.3
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:49.0) Gecko/20100101 Firefox/49.0
< HTTP/1.1 301 Moved Permanently
< Location: https://www.olx.kz/account/?ref%5B0%5D%5Baction%5D=myaccount&ref%5B0%5D%5Bmethod%5D=index
< X-B: olxkz-riak03
< X-T: D=13650 t=1489473115574629
< Content-Length: 0
< Content-Type: text/html; charset=UTF-8
< Expires: Tue, 14 Mar 2017 06:31:55 GMT
< Cache-Control: max-age=0, no-cache, no-store
< Pragma: no-cache
< Date: Tue, 14 Mar 2017 06:31:55 GMT
< Connection: keep-alive
< Set-Cookie: PHPSESSID=hc4kdcdo9b34usrduascdrnr17; path=/; domain=.olx.kz; secure; HttpOnly
< Set-Cookie: mobile_default=desktop; path=/; domain=.olx.kz; secure
< 
* Connection #0 to host www.olx.kz left intact
* Found bundle for host www.olx.kz: 0x55fa40894100 [can pipeline]
* Re-using existing connection! (#0) with host www.olx.kz
* Connected to www.olx.kz (10.10.10.10) port 443 (#0)
> GET /account/?ref%5B0%5D%5Baction%5D=myaccount&ref%5B0%5D%5Bmethod%5D=index HTTP/1.1
Host: www.olx.kz
Content-Type: application/x-www-form-urlencoded
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding: gzip, deflate, br
Accept-Language: ru,en-US;q=0.7,en;q=0.3
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:49.0) Gecko/20100101 Firefox/49.0
< HTTP/1.1 200 OK
< Vary: Accept-Encoding
< Content-Encoding: gzip
< X-B: olxkz-riak03
< X-T: D=33272 t=1489473115956761
< Content-Length: 10300
< Content-Type: text/html; charset=UTF-8
< Expires: Tue, 14 Mar 2017 06:31:56 GMT
< Cache-Control: max-age=0, no-cache, no-store
< Pragma: no-cache
< Date: Tue, 14 Mar 2017 06:31:56 GMT
< Connection: keep-alive
< Set-Cookie: PHPSESSID=mp6ls3a87t7trsovmbgll6ten5; path=/; domain=.olx.kz; secure; HttpOnly
< Set-Cookie: mobile_default=desktop; path=/; domain=.olx.kz; secure
< 
* Connection #0 to host www.olx.kz left intact

Код:

<?php
namespace app\components\olx;
use GuzzleHttp\Client;
use GuzzleHttp\Exception\ClientException;
class Auth {
    public $baseUrl = 'https://www.olx.kz';
    public $userAgent;
    private $_client;
    public function __construct()
    {
        $this->_client = new Client([
            'base_uri' => $this->baseUrl,
        ]);
    }
    public function login($login, $password)
    {
        $res = null;
        try {
            $res = $this->_client->post(
                'account/?ref[0][action]=myaccount&ref[0][method]=index#login',
                [
                    'headers' => [
                        'Accept' => 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
                        'Accept-Encoding' => 'gzip, deflate, br',
                        'Accept-Language' => 'ru,en-US;q=0.7,en;q=0.3',
                        'Upgrade-Insecure-Requests' => '1',
                        'User-Agent' => $this->userAgent,
                    ],
                    'form_params' => [
                        'login' => [
                            'email_phone' => $login,
                            'password' => $password,
                            'remember-me' => 'on',
                        ]
                    ],
                    'debug' => true,
                ]
            ); 
        } catch (ClientException $e) {
            echo $e->getMessage();
            return false;
        }
        var_dump($res->getHeader('Set-Cookie'));
        //print_r($this->_client->getHeaders());
        //print_r($res->getHeaders());
        echo $res->getBody();
    }
}
Answer 1

Судя по всему вам нужно авторизоваться и в дальнейшем выполнить некоторые действия авторизованным, так? Тогда всё просто, сначала нужно сконфигурировать клиент с использованием cookie:

public function __construct()
{
    $this->_client = new Client([
        'base_uri' => $this->baseUrl,
        'cookies' => true,
    ]);
}

После первого запроса (авторизации) $this->_client уже будет содержать те cookies, которые сервер вам отдал во время его и вы сможете делать авторизованные запросы этим клиентом.

READ ALSO
SET SESSION объединить с SELECT

SET SESSION объединить с SELECT

В запросе к базе данных используется GROUP_CONCATЧтобы увеличить количество символов для выводимой строки, нужно использовать

336
Как открывать файлы в phpstorm в правильной кодировке?

Как открывать файлы в phpstorm в правильной кодировке?

Если через Notepad++ подключаюсь по ftp/sftp к серверу, то файлы открываются в кодировке, вкоторой они на сервере и я могу работать с ними, сохранять...

344
Отправка писем с сервера

Отправка писем с сервера

Настраиваю отправку почты с VPS

327
include_path в php.ini не работает

include_path в php.ini не работает

Система NGINX без APACHE в фале phpini прописал include_path = "

307