file_get_contents --> forbidden
ik gebruik json voor het inloggen op beheer panelen, nu geeft 1 beheerpaneel van site 1 een foutmelding:
Code (php)
1
Warning: file_get_contents(voorbeeld.php) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.1 403 Forbidden
Maar de andere (site2 en de site waar de json vandaan komen) werken wel zonder foutmelding.
Hoe komt dit?
Ik heb zelf al gekeken dat het komt door de site vanwaar de json komt, maar dan raden ze me iets aan met curl
Gewijzigd op 10/09/2013 17:27:46 door Php knipper
Het is me even niet duidelijk uit je omschrijving, maar weet je of het probleem aan jouw kant zit, of aan de kant waarvandaan je de data wilt ophalen? file_get_contents wordt namelijk nogal eens door providers geblokkeerd. In dat geval zal je inderdaad met cUrl aan de slag moeten.
Dus wat gebeurt er als je zelf met je browser naar die URL toe surft? Waarschijnlijk krijg je dan ook forbidden?
Is het je eigen site of van een ander?
site 1 geeft een foutmelding en site 2 doet dat niet (en werkt ook nog)
Toevoeging op 10/09/2013 17:34:16:
alle site's zijn van mij, ik kan de inhoudt zien als ik meteen naar de url ga
Toevoeging op 10/09/2013 17:36:30:
Code (php)
1
2
3
2
3
<?php
if($respons = json_decode(file_get_contents('http://site.com/admin/inlog_GET.php?ip='.$ip.'&gebruikersnaam='.$user.'&wachtwoord='.sha1($pas).'&domein='.$domein_token))) {
?>
if($respons = json_decode(file_get_contents('http://site.com/admin/inlog_GET.php?ip='.$ip.'&gebruikersnaam='.$user.'&wachtwoord='.sha1($pas).'&domein='.$domein_token))) {
?>
Sommige providers blokkeren functies als file_get_contents. dan zou je het inderdaad met CURL moeten doen.
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php
$open_url = curl_init($site);
curl_setopt($open_url, CURLOPT_RETURNTRANSFER, TRUE);
$html = curl_exec($open_url); // <-- pagina opslaan
$httpCode = curl_getinfo($open_url, CURLINFO_HTTP_CODE); // <-- errorcode in variabel
?>
$open_url = curl_init($site);
curl_setopt($open_url, CURLOPT_RETURNTRANSFER, TRUE);
$html = curl_exec($open_url); // <-- pagina opslaan
$httpCode = curl_getinfo($open_url, CURLINFO_HTTP_CODE); // <-- errorcode in variabel
?>
Ik heb het al eens geprobeert maar toen ik $html door de json_decode haalde gaf deze een leeg $respons
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL, 'http://www.example.com/api/test.php');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
$json = curl_exec($ch);
echo $json;
?>
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL, 'http://www.example.com/api/test.php');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
$json = curl_exec($ch);
echo $json;
?>
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL, 'http://vb.com/admin/inlog_GET.php?versie='.$versie.'&domein='.$domein_token);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
$json = curl_exec($ch);
if($respons = json_decode($json)) {
if(!empty($respons->error)) {
$nota = '<div style="background: rgba(255, 0, 0, 0.28);padding: 5px;margin: 2px;">'.$respons->error.'</div>';
}
} else {
$nota = '<div style="background: rgba(255, 0, 0, 0.28);padding: 5px;margin: 2px;">Respons fout.</div>';
}
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL, 'http://vb.com/admin/inlog_GET.php?versie='.$versie.'&domein='.$domein_token);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
$json = curl_exec($ch);
if($respons = json_decode($json)) {
if(!empty($respons->error)) {
$nota = '<div style="background: rgba(255, 0, 0, 0.28);padding: 5px;margin: 2px;">'.$respons->error.'</div>';
}
} else {
$nota = '<div style="background: rgba(255, 0, 0, 0.28);padding: 5px;margin: 2px;">Respons fout.</div>';
}
Gewijzigd op 10/09/2013 21:24:00 door php knipper
anders zou ik het even niet weten hoe ik je verder kan helpen
ik post deze niet omdat dat iets moeilijker is voor hackers (zo kennen ze de bron niet)
1. jouw url in de adresbalk van de browser: werkt.
2. jouw url in mijn CURL voorbeeldje: werkt:
output:
{"Versie_ok":"U gebruikt de laatste versie."}
en toch gaat er hier 'if($respons = json_decode($json)) {' iets mis
niet beter maken?
Overigens is het response.
Toevoeging op 10/09/2013 23:49:52:
en zo even proberen:
kun je van Overigens is het response.
Toevoeging op 10/09/2013 23:49:52:
en zo even proberen:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL, 'http://vb.com/admin/inlog_GET.php?versie='.$versie.'&domein='.$domein_token);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
$response = curl_exec($ch);
if($response !== false)
{
$obj = json_decode($response);
if(isset($obj->error))
{
$nota = '<div style="background: rgba(255, 0, 0, 0.28);padding: 5px;margin: 2px;">'.$obj->error.'</div>';
}
else
{
// alles ok
print_r($obj);
}
}
else
{
$nota = '<div style="background: rgba(255, 0, 0, 0.28);padding: 5px;margin: 2px;">response fout.</div>';
}
?>
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL, 'http://vb.com/admin/inlog_GET.php?versie='.$versie.'&domein='.$domein_token);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
$response = curl_exec($ch);
if($response !== false)
{
$obj = json_decode($response);
if(isset($obj->error))
{
$nota = '<div style="background: rgba(255, 0, 0, 0.28);padding: 5px;margin: 2px;">'.$obj->error.'</div>';
}
else
{
// alles ok
print_r($obj);
}
}
else
{
$nota = '<div style="background: rgba(255, 0, 0, 0.28);padding: 5px;margin: 2px;">response fout.</div>';
}
?>
Gewijzigd op 10/09/2013 23:35:17 door Frank Nietbelangrijk
bedankt, het werkt nu