Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[PHP] 401 unauthorized source

Pagina: 1
Acties:

  • ZeroXT
  • Registratie: December 2007
  • Laatst online: 21-11 12:31
Op moment dat ik met file_get_contents(), Curl of fopen een webadres ophaal die een header 401 unauthorized geeft, krijg ik van PHP een foutmelding.

Nu wil ik echter de broncode van die betreffende pagina opvragen en dit is juist iets wat me niet lukt. Een website die ik probeer te bereiken die geeft op zijn loginpagina een 401 header mee. Juist die broncode (body) moet ik hebben.

PHP:
1
2
3
$source = @file_get_contents('website.nl/login');

var_dump($source) //false


Deze pagina is gewoon een html pagina met eigen loginformulier. Iemand enig idee hoe ik de broncode van soort gelijke pagina kan ophalen? :)

  • Herko_ter_Horst
  • Registratie: November 2002
  • Niet online
Bij een 401 response hoort geen broncode. Er hoort dan een WWW-Authenticate header in de response te zitten. Om toegang te krijgen, moet je een Authentication header meesturen met de juist inloggegevens.

Meestal wordt dit door de browser afgehandeld middels een pop-up dat je moet inloggen.

Bij een login-formulier zou je geen 401 verwachten, dus dat is wel vreemd. Misschien accepteert de server je request om een andere reden niet (maar dan is 401 eigenlijk geen juiste response).

"Any sufficiently advanced technology is indistinguishable from magic."


  • Barryvdh
  • Registratie: Juni 2003
  • Laatst online: 21-11 14:12
Als je de @ weghaalt krijg je waarschijnlijk al betere informatie ;)
Maar krijg je echt html te zien, of zo'n popup voor username/password? En wat wil je doen precies? Want je kan ook de username/pass meegeven tijdens je request ('http://user:password@website.nl/login')

  • johnkeates
  • Registratie: Februari 2008
  • Laatst online: 04-07 16:30
De 401 klopt wel. Zoals herko schreef: WWW-Authenticate headers. Je browser lost dat mooi op door de juiste headers mee te sturen, te verwerken en popups te tonen en het opnieuw te proberen als het mislukt. fgc doet dat niet, die stuurt gewoon een normale HTTP request en doet niks met extra headers.

  • Kalentum
  • Registratie: Juni 2004
  • Laatst online: 21:29
Met file_get_contents gaat dat niet. Die vangt blijkbaar fouten af.

Het werkt wel met cUrl.

Iets als:
PHP:
1
2
3
4
5
6
$url = "http://url_die_401_geeft";
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$content = curl_exec($curl);
curl_close($curl);
var_dump($content);

  • Barryvdh
  • Registratie: Juni 2003
  • Laatst online: 21-11 14:12
Of als je het wat mooier wil doen, kan je Guzzle gebruiken: http://guzzle.readthedocs.org/en/latest/
PHP:
1
2
3
4
5
6
7
8
$client = new GuzzleHttp\Client();
$res = $client->get('https://api.github.com/user', [
    'auth' =>  ['user', 'pass']
]);
echo $res->getStatusCode();           // 200
echo $res->getHeader('content-type'); // 'application/json; charset=utf8'
echo $res->getBody();                 // {"type":"User"...'
var_export($res->json());             // Outputs the JSON decoded data
Pagina: 1