Domanda

Devo inviare informazioni a un sito Web esterno usando il ricciolo.Ho impostato il Guzzle sulla mia applicazione laravel.Ho impostato le basi, ma secondo la documentazione del sito web, c'è un'azione necessaria per il nome utente e la password.Come posso passare l''azione' insieme alle credenziali necessarie per accedere e ottenere l'accesso?

Il sito Web indica:

curl [-k] –dump-header <header_file> -F “action=login” -F “username=<username>” -F “password=<password>” https://<website_URL>

My Controller:

    $client = new \GuzzleHttp\Client();

    $response = $client->get('http://website.com/page/login/', array(
        'auth' => array('username', 'password')
    ));

    $xml = $response;
    echo $xml;
.

Il sito Web verrà caricato sul echo, ma tirerà solo la schermata di accesso.Ho bisogno di quelle credenziali per bypassare la schermata di accesso (con un login di successo) per arrivare alla porzione di informazioni di cui ho bisogno per arricciatura.

È stato utile?

Soluzione

curl -F invia una richiesta post invece di una richiesta di ricezione.Quindi dovrai modificare il tuo codice di conseguenza, qualcosa come

$client = new \GuzzleHttp\Client();

$response = $client->post('http://website.com/page/login/', [
    'body' => [
        'username' => $username,
        'password' => $password,
        'action' => 'login'
    ],
    'cookies' => true
]
);

$xml = $response;
echo $xml;
.

Vedi http://guzzle.readthedocs.org/en/latest/quickstart.html#Post-richieste , http://curl.haxx.se/docs/manpage.html#-F

Modifica:

Basta aggiungere ['cookies' => true] alle richieste per utilizzare il cookie Auth associato a questo GuzzleHttp\Client(). http://guzzle.readthedocs.org/en/latest/clients.html#cookies .

$response2 = $client->get('http://website.com/otherpage/', ['cookies' => true]);
.

Altri suggerimenti

Avevo problemi a ottenere la risposta di @ Jeremiahwinsley per lavorare sulla versione più recente del Guzzle, quindi ho aggiornato il loro codice per funzionare come Guzzle 5.x.

Sono richiesti tre modifiche principali

    .
  • Utilizzo di form_params invece di body per impedire l'errore "Passare nell'opzione di richiesta" corpo "come array per inviare una richiesta di post è stata deprecata."
  • Modifica dei cookie per utilizzare l'oggetto CookieJar
  • Utilizzare ->getBody()->getContents() per ottenere il corpo della richiesta .

Ecco il codice aggiornato:

$client = new \GuzzleHttp\Client();
$cookieJar = new \GuzzleHttp\Cookie\CookieJar();

$response = $client->post('http://website.com/page/login/', [
    'form_params' => [
        'username' => $username,
        'password' => $password,
        'action' => 'login'
    ],
    'cookies' => $cookieJar
]
);

$xml = $response->getBody()->getContents();
echo $xml;
.

e per continuare a utilizzare i cookie nelle richieste future, passare nel cookieJar alla richiesta:

$response2 = $client->get('http://website.com/otherpage/', ['cookies' => $cookieJar]);
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top