ip-adres:port in plaats van url
Loop natuurlijk meteen tegen mijn grenzen aan.
Ik probeer een jpg op te slaan van een html pagina die mijn ip-cam genereert.
Die ip-cam roep ik aan met ip-adres en poortnummer (zoals http://123.123.123.123:2200).
Nou lukt het me wél de source code van willekeurige URL's op te halen en daar een plaatje uit op te slaan, maar bij die ip-cam lijkt het fout te gaan bij het ip-adres + poort in plaats van een 'normale' url.
Iemand tips over hoe ik dat moet doen? Googlen met ip-adres en php als termen geeft eigenlijk alleen resultaten over het retrieven van ip-adressen.
Daarmee kan je ook sessies openen en wel specifieke poorten openen.
Van http://php.net/manual/en/function.curl-setopt.php:
Wat zie ik over het hoofd?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
// create curl resource
$ch = curl_init();
// set url
curl_setopt($ch, CURLOPT_URL, "http://123.123.123.123:2200");
//return the transfer as a string
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// $output contains the output string
$output = curl_exec($ch);
// close curl resource to free up system resources
curl_close($ch);
echo $output;
?>
// create curl resource
$ch = curl_init();
// set url
curl_setopt($ch, CURLOPT_URL, "http://123.123.123.123:2200");
//return the transfer as a string
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// $output contains the output string
$output = curl_exec($ch);
// close curl resource to free up system resources
curl_close($ch);
echo $output;
?>
Gewijzigd op 23/09/2015 12:40:14 door Paul Bekkers
Los daarvan:
je vergeet een password mee te geven.
mogelijk werkt http://jeusername:jepassword@84.xxxxx:2200/
(nb: ik zou het ip adres verwijderen uit je post)
dus http:// een-username : een-password @ ipadres : portnummer
(want phphulp verhaspeld de link)
Gewijzigd op 23/09/2015 12:01:07 door Ivo P
Dit was mijn eerste stap: eerst de config pagina van de camera benaderen. Zou ook moeten werken.
Volgende stap zou zijn de volledige URL naar het snapshot (incl. username en wachtwoord):
http://123.123.123.123:2200/cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=xxx&pwd=xxx
Ik ken met name camera's die aangesproken worden met http://10.0.0.1:99/snapshot.cgi of /videostream.cgi voor bewegend beeld.
Er zijn uitzonderingen, maar de Foscam cams doen het (veelal) zo.
Het probleem lijkt dus wel te zitten in de ip:poort combinatie in plaats van de rest van de URL, aangezien http://123.123.123.123:2200 ook niet werkt.
Gewijzigd op 23/09/2015 15:06:25 door Paul Bekkers
Waar draait het php-script? op een server in een datacenter, of in het lokale netwerk waarin ook de camera hangt?
Toevoeging op 23/09/2015 15:16:45:
als ik de url aanroep, krijg ik xml terug:
<CGI_Result>
<result>-2</result>
</CGI_Result>
als ik het password leeg laat,
en -1 als ik geen usr/pwd opgeef.
Script draait bij de hosting provider.
Maar als een browser exact dezelfde URL kan openen, moet PHP dat toch ook kunnen?
werkt je curl script wel als je via poort 80 de site van phphulp.nl opvraagt?
ofwel: heeft je provide niet de curl-functies geblokt?
Dat werkte prima.
Dus curl werkt.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
// create curl resource
$ch = curl_init();
// set url
curl_setopt($ch, CURLOPT_URL, "http://www.example.com:80");
//return the transfer as a string
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// $output contains the output string
$output = curl_exec($ch);
// close curl resource to free up system resources
curl_close($ch);
echo $output;
?>
// create curl resource
$ch = curl_init();
// set url
curl_setopt($ch, CURLOPT_URL, "http://www.example.com:80");
//return the transfer as a string
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// $output contains the output string
$output = curl_exec($ch);
// close curl resource to free up system resources
curl_close($ch);
echo $output;
?>
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
// create curl resource
$ch = curl_init();
// set url
curl_setopt($ch, CURLOPT_URL, "http://84.xxx:2200/");
//return the transfer as a string
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// $output contains the output string
$output = curl_exec($ch);
// close curl resource to free up system resources
curl_close($ch);
echo $output;
?>
// create curl resource
$ch = curl_init();
// set url
curl_setopt($ch, CURLOPT_URL, "http://84.xxx:2200/");
//return the transfer as a string
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// $output contains the output string
$output = curl_exec($ch);
// close curl resource to free up system resources
curl_close($ch);
echo $output;
?>
geprobeerd op mijn server.
Dat geeft een html pagina (in unicode)
dus kennelijk is het iets op jouw server dat je niet naar buiten kunt.
of jouw camera blokt specifiek het ip van de server van jou, maar dat lijkt me onwaarschijnlijk.
Mijn webhoster blokkeert blijkbaar een hoop poorten. example.com:80 werkt wel, example.com/81 niet. Dat ga ik dus even bij mijn hoster uitzoeken.
Toevoeging op 24/09/2015 09:29:05:
De reactie van de helpdesk van mijn webhoster:
"Bedankt voor uw bericht. Buiten de standaard services-poorten zoals poort 80,21,25 etc. staan er geen andere poorten open op onze firewalls. Dit ter voorkoming van misbruik. Er moet dan ook een goede reden zijn waarom we deze poort zouden toestaan."