[PHP] XMLRPC geeft Access Denied

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Stuupje
  • Registratie: Februari 2011
  • Laatst online: 12-05 22:42
Geachte lezer,

Ik ben een week geleden begonnen met het programmeren van een XML-RPC interface tussen ejabberd en phpBB, maar helaas loop ik daar tegen een probleem aan.

Als XML-RPC library gebruik ik http://phpxmlrpc.sourceforge.net/ (heb zowel versie 2.2.2 als de
3.0.0-beta getest). Reden hiervoor is de nog niet volledig gesupporte library van PHP zelf, en dat deze library redelijk goed staat aangeschreven.
Een ander voordeel is het hebben van een test server, om te zien of je client-requests op een goede manier verstuurd worden.

Bij het testen loop ik helaas tegen een probleem aan;
XML-RPC Fault #5: Connect error: Connection refused (111)

Wat een raar probleem is, aangezien ik gewoon phpxmlrpc.sourceforge.net/server.php zonder problemen op kan vragen.

Configuratie

Ik draai het script op een gehuurde webhost welke PHP 5.2.4 draait met alle belangrijke extensions ingeschakeld.

Code van het test-client script:
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
<?php

require('xmlrpc.inc.php');

    function getState($stateNR)
    {
        // Make an object to represent our server.
        $server = new xmlrpc_client("/server.php", "phpxmlrpc.sourceforge.net", 80, "http");
        //$server->SetCurlOptions(array('CURLOPT_USERAGENT' => 'Mozilla/5.0 (Windows; U; Windows NT 5.1; rv:1.7.3) Gecko/20041001 Firefox/0.10.1'));
        $server->setDebug(2);
        
        // Send a message to the server.
        $message = new xmlrpcmsg('examples.getStateName',   
            array(
                new xmlrpcval($stateNR, 'int')
            )
        );
        $result = $server->send($message);
        
        if (!$result) 
        {
            echo "Could not connect to the test server.\r\n";
            return false;
        } 
        elseif ($result->faultCode()) 
        {
            echo "XML-RPC Fault #" . $result->faultCode() . ": " . $result->faultString() . "\r\n";
            return false;
        } 
        else 
        {
            echo "Succesvol verstuurd.";
            return true;
            
            /*$struct = $result->value();
            $userval = $struct->structmem('infoCorrect');
            $infoCorrect = $userval->scalarval();
            return $infoCorrect;*/
        }
    }
    
    $result = getState(38);
?>


Een volledige weergave van de foutmelding (en debug van de verzending) kan hier worden gevonden; http://eve-it.org/xmlrpc/test.php


Wat heb je zelf geprobeerd?
  • Gegoogled op vanalles, maar niets concreets gevonden
  • Zowel 2.2.2 als 3.0.0-beta van de library geprobeerd
  • Als je op lijn 8 'http' in 'http11' veranderd gebruikt het script cURL, welke een soortgelijke foutmelding geeft
~Stuupje

[ Voor 6% gewijzigd door Stuupje op 13-07-2012 15:44 ]


Acties:
  • 0 Henk 'm!

  • ValHallASW
  • Registratie: Februari 2003
  • Niet online
(hier stond iets onzinnigs over de poort in de host-header ---- die gewoon mag

Heb je de mogelijkheid om met bv. wireshark te kijken welke data er precies wordt verstuurd, naar welke server en op welke poort? De foutmelding suggereert dat 'ie verbinding maakt met de verkeerde server (eentje die niet luistert naar requests) of op de verkeerde poort. Als het op shared hosting is: heb je wel toestemming om verbindingen naar buiten te maken?

Het is wellicht ook nog een optie om de alternatieve constructor te gebruiken:
PHP:
1
$client = new xmlrpc_client("http://phpxmlrpc.sourceforge.net/server.php");

[ Voor 63% gewijzigd door ValHallASW op 13-07-2012 16:43 ]


Acties:
  • 0 Henk 'm!

  • Stuupje
  • Registratie: Februari 2011
  • Laatst online: 12-05 22:42
Ik heb hetzelfde script op een tijdelijke VMware aan de praat gekregen zonder problemen, wat betekend dat de of mijn webhost de boel tegen houd, of dat de host van het testscript mijn webhost niet toelaat.

In ieder geval zal ik geen gebruik meer gaan maken van XML RPC, maar het handmatig oplossen door een POST naar PHP pagina te versturen (via cURL) welke een standaard XML teruggeeft die weer door de client ui wordt gelezen.
Zelfde concept als XML RPC, maar hopelijk zonder gezeur.