[php] Webservice via GET

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik wil het volgende doen:

PHP:
1
2
3
4
5
6
7
8
9
10
11
$httpheader =
"GET /service/service.asmx/getText?Type=$Type HTTP/1.1
Host:  test.domein.nl";
    
$errno = "1"; 
$errstr = "Het openen van een socket gaat fout"; 
$fp = fsockopen ("localhost", 80, $errno, $errstr, 10); 
if (!$fp) echo $errstr($errno)."<br />\n"; 
fputs ($fp, $httpheader, strlen($httpheader)); 
echo fread($fp,32768); 
fclose($fp);


Kortom, ik roep een webservice aan die mij (localhost) de juiste XML moet geven. Helaas doet hij dit niet. Doe ik soms wat verkeerd met die fsockopen? Moet dit nou juist naar mijn server of naar de server waar de webservice draait?

Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 14:28
Naar daar waar de webservice draait.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hmm, dit lijkt niet te baten. Hij kan gewoon geen connectie maken met die andere server lijkt het wel.

Concreet wil ik via een GET een request doen op een andere server. De xml die ik terugkrijg wil ik met php in een leuk jasje gieten. Is er een makelijkere manier?

Acties:
  • 0 Henk 'm!

  • dusty
  • Registratie: Mei 2000
  • Laatst online: 15-09 18:24

dusty

Celebrate Life!

Heb je wel rechten om sockets te openen op de server?

Waarom gebruik je niet gewoon fopen("http://blabla") ?

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


Acties:
  • 0 Henk 'm!

Verwijderd

Krijg je een foutmelding omtrend de verbinding? Of lijkt ie wel te verbinden maar krijg je niets terug?

Het lijkt erop dat je $httpheader niet voldoet aan het zijn van een echte header. Er staan bijvoorbeeld geen newlines in (/r/n) wat ik mij kan herinneren is dat die altijd wel in een request voorkomen

Acties:
  • 0 Henk 'm!

  • Helox-in-a-box
  • Registratie: Augustus 2000
  • Laatst online: 21-09 10:07
ik had ditzelfde probleem ook met fsockopen, ik gebruik nu dit script en het werkt perfect. Ergens in google-groups gevonden :)
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
function GetHTML ($url, &$delta, $corto = false, $complet = true) {
    $url_stuff = parse_url($url);
    $fp = fsockopen ($url_stuff['host'], 80, $errno, $errstr, 30);
    if (!$fp) {
        exit;
    } else {
        $header = "GET " . $url_stuff['path'] . "?" . $url_stuff['query'] ;
        $header = $header . " HTTP/1.0\r\nHost: " . $url_stuff['host'] . "\r\n\r\n";
        fputs ($fp, $header);
        $header = '';
        $body = '';
        $act = false;
        $fin = false;
        while ((!feof($fp)) && !$fin) {
        $line = fgets ($fp,1024);
        if (!$act) {
            if (strpos($line, "\r\n", 0) == 0) {
                $header .= $line;
                if (!$complet) $fin = true;
                    $act = true;
            } else {
                $header .= $line;
            }
        } else {
            if ($corto) {
                if (eregi ("<body([^>]*)>", $line, $o)) $fin = true;
            }
            if (!$fin) $body = $body . $line;
        }
    }
        $ret = strpos($header, "Location:", 0);
        if ($ret !== false) {
            $fin = strpos($header, "\r\n", $ret +9);
            $nueva = substr($header, $ret+9, $fin - $ret - 9);
            $body = GetHTML($nueva, $delta, $corto, $complet);
        } else {
            $delta = $url;
        }

        fclose ($fp);
    }
    return $body;
}

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hmm, ik zal dat scriptje morgen eens uitproberen. Misschien dat het daarmee lukt.
Alvast bedankt voor de tips.

Acties:
  • 0 Henk 'm!

Verwijderd

volgens mij is dit probleem erg eenvoudig te fixen...

PHP:
1
2
3
$httpheader =
"GET /service/service.asmx/getText?Type=$Type HTTP/1.1
Host:  test.domein.nl";


een webserver vindt het namelijk fijn om te weten wanneer alle data binnen is... daarom wacht ie op een extra lege regel
dus dit moet wel werken:
PHP:
1
2
3
4
$httpheader =
"GET /service/service.asmx/getText?Type=$Type HTTP/1.1
Host:  test.domein.nl
";

[ Voor 6% gewijzigd door Verwijderd op 26-01-2004 23:54 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Helaas het mag niet baten. Ik kan nu wel verbinding maken en krijg het volgende terug:

Server: Microsoft-IIS/5.0 Date: Tue, 27 Jan 2004 09:21:54 GMT Content-Type: text/html Content-Length: 87 The parameter is incorrect.

ik vraag nu dit:
PHP:
1
fputs($fp, "GET /service/service.asmx/getText?Type=$Type / HTTP/1.1\r\nHost: " . $domain . "\r\n\r\n");


Dat zou toch goed moeten zijn?

[ Voor 69% gewijzigd door Verwijderd op 27-01-2004 10:30 ]

Pagina: 1