PHP GET Request – Basic Authorization – Chunk data
Če želite brez uporabe zunanjih knjižnic (kot naprimer PHP cURL) kreirati GET request oz. zahtevo, ki zna opraviti z Basic Authorization je fsockopen odlična zadeva.
Basic Authorization:
Okno, ki se pojavi, ko želimo dostopati do spletne strani, ki je zaščitena z geslom ter uporabniškim imenom.
GET metoda (headerji):
-
$out = "GET /blog/feed/ HTTP/1.1\r\n";
-
$out .= "Host: www.trsplet.com\r\n";
-
$out .= "Connection: Close\r\n";
-
$out .= "\r\n\r\n";
Uporabite absolutno pot do spletne strani preko katere želite dostopati s PHP-jem. Nastavite Host (če uporabljate IP, potem ne pišite www. spredaj), nato pa še uporabite base64_encode za uporabniško ime ter geslo, ki sta potrebna za dostop do spletne strani. Zakaj base64? Ker morata biti geslo ter uporabniško ime poslana v base64 kodiranem tekstu:
Before transmission, the username and password are encoded as a sequence of base-64 characters. For example, the user name Aladdin and password open sesame would be combined as Aladdin:open sesame – which is equivalent to QWxhZGRpbjpvcGVuIHNlc2FtZQ== when encoded in base-64.
Sedaj odprimo povezavo in poglejmo, če je komunikacija med PHP-jem ter strežnikom uspešna:
Opis ter kode napak, ki jih fsockopen vrne. Ko zadeva deluje pošljemo headerje (nastavitve), ki smo jih zapisali zgoraj v PHP out spremenljivko ter nato preberemo vse podatke (vsebino), ki nam jih je strežnik vrnil:
V našem primeru dobimo od strežnika nazaj sledeče podatke (malce skrčeno, za lažji pregled):
-
HTTP/1.1 200 OK
-
Date: Mon, 21 Apr 2008 08:03:50 GMT
-
Server: Apache
-
X-Powered-By: PHP/5.2.3
-
X-Pingback: http://trsplet.com/blog/xmlrpc.php
-
Last-Modified: Sun, 20 Apr 2008 19:14:45 GMT
-
ETag: "3ee78cc4133141ec2464445a405bb9dd"
-
Connection: close
-
Transfer-Encoding: chunked
-
Content-Type: text/xml; charset=UTF-8
-
-
23d1
-
<?xml version="1.0" encoding="UTF-8"?>
-
<title>.: TRSplet - internetne storitve .:</title>
-
<atom:link href="http://www.trsplet.com/blog/feed/" rel="self" type="application/rss+xml" />
-
<link>http://trsplet.com/blog</link>
-
<description>O spletu, življenju in RT le tega</description>
Torej v odgovoru prejmemo tudi header nastavitve, zato jih je potrebno prebrati ter odstraniti iz same vsebine:
Header tabela po zgornji operaciji:
-
(
-
[0] => HTTP/1.1 200 OK
-
[2] => Server: Apache/1.3.33 (Darwin) mod_ssl/2.8.24 OpenSSL/0.9.7l
-
[3] => Cache-Control: no-cache
-
[4] => WWW-Authenticate: Basic realm="WebNative"
-
[5] => Cache-Control: max-age=60
-
[6] => Expires: Mon, 21 Apr 2008 07:53:15 GMT
-
[7] => Connection: close
-
[8] => Transfer-Encoding: chunked
-
[9] => Content-Type: text/html
-
)
Vsaka vrstica se konča z \r\n, na koncu pa zaključimo header nastavitve z \r\n\r\n. Ko imamo vse headerje prebrane pregledamo ali nam je strežnik vrnil chunk data - vsebino, ki potrebuje dodatno obdelavo:
Vsa komunikacija je bila opravljena, dobili smo podatke in jih v primeru chunk data - vsebine pravilno prebrali, sedaj še zapremo povezavo in obdelamo podatke, ki smo jih dobili:
-
-
// sedaj obdelaj data spremenljivko, ki vsebuje vsebino spletne strani, ki smo jo klicali
Datoteke:
Dodatne informacije:
Podobni članki:
- PHP POST Request – brez uporabe cURL knjižnice
- Hitri vnos/uvoz podatkov v MySQL preko LOAD DATA INFILE
- Pretvorba PHP MySQL aplikacije v PHP MS SQL aplikacijo (apache, php, mdb2, mysql => iis, php, mdb2, mssql)
- Preprosta skripta – kreiranje Excel datoteke iz PHP tabele/array
- Uporabni HTML meta tagi – PHP header
- PHP – Kreiranje Excel datoteke – Pisanje v Excel datoteko – PHP – xls
- PHP setlocale (seznam držav in kode le-teh)
- Stalni UTF-8 problemi – utf8 mysql php – čšž šumniki težave – iskanje znaki – mysql like
- PHP – pošiljanje emaila – epošte – sending email – HTML Mime Mail
- Šumniki – UTF-8 – Težave – PHP & MySQL


