By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
449,221 Members | 1,663 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 449,221 IT Pros & Developers. It's quick & easy.

xmlrpc: no content-length in response

P: n/a
Hello,

I'm developing a client/server architecture based on the XML-RPC
implementation in php4. All works pretty well, except that in the
response from the server there is no "Content-Length" in the header.
Since the XML-RPC specification requires this header to be present in
the server response, some libraries (notably: libxmlrpc++) choke on
this. For clarity, here's a (simple) server (slightly altered from:
http://www.devshed.com/c/a/PHP/Using...-with-PHP/4/):

--- xmlrpc-server.php ---
<?php

function checkVersion_func( $method_name, $params, $app_data ) {
return 0.12;
}

xmlrpc_server_register_method($xmlrpc_server, "checkVersion",
"checkVersion_func");

/*
* When an XML-RPC request is sent to this script, it
* can be found in the raw post data.
*/
$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA
: "";

$request_xml = $HTTP_RAW_POST_DATA;
/*
* The xmlrpc_server_call_method() sends a request to
* the server and returns the response XML. In this case,
* it sends the raw post data we got before. It requires
* 3 arguments:
* The first is the handle of a server created with
* xmlrpc_server_create(), the second is a string containing
* an XML-RPC request, and the third is for application data.
* Whatever is passed into the third parameter of this function
* is passed as the third paramater of the PHP function that the
* request is asking for.
*/
$response = xmlrpc_server_call_method($xmlrpc_server, $request_xml,
'');

// Now we print the response for the client to read.
print $response;

xmlrpc_server_destroy($xmlrpc_server);

?>
--- end ---

Now, if we call 'checkVersion' with an RPC client, the output from
ngrep is this:

--- ngrep ---
####
T xxxxx:52266 -> xxxxx:80 [AP]
POST /~xxxxx/pb/xmlrpc-server.php HTTP/1.1.
User-Agent: XMLRPCCocoa.
Host: xxxxxx
Pragma: no-cache.
Accept: */*.
Content-Type: text/xml.
Content-Length: 110.
..
<?xml version="1.0"?>
<methodCall>
..<methodName>checkVersion</methodName>
..<params>
...</params>
..</methodCall>
##
T xxxxx:80 -> xxxxx:52266 [AP]
HTTP/1.1 200 OK.
Date: Tue, 14 Feb 2006 17:20:21 GMT.
Server: Apache/1.3.34 (Ubuntu) PHP/4.4.2-1.
X-Powered-By: PHP/4.4.2-1.
Transfer-Encoding: chunked.
Content-Type: text/html; charset=iso-8859-1.
..
a7 .
<?xml version="1.0" encoding="iso-8859-1"?>
<methodResponse>
<params>
<param>
<value>
<double>0.120000</double>
</value>
</param>
</params>
</methodResponse>

--- end ---

As you can see, there is no "Content-Length" in the response. Am I
doing something wrong here, or could this be a bug in php? Btw. I tried
this on different servers, with the same results.

Server version info:
Platform: Linux (ubuntu)
Apache: 1.3.34
PHP: 4.4.2-1
XMLRPC: xmlrpc-epi v. 0.51

Thanks for any help,
Emiel.

Feb 14 '06 #1
Share this Question
Share on Google+
1 Reply


P: n/a
On 2006-02-14, em*****@yahoo.co.uk <em*****@yahoo.co.uk> wrote:
Hello,

I'm developing a client/server architecture based on the XML-RPC
implementation in php4. All works pretty well, except that in the
response from the server there is no "Content-Length" in the header.
Since the XML-RPC specification requires this header to be present in
the server response, some libraries (notably: libxmlrpc++) choke on
this. For clarity, here's a (simple) server (slightly altered from:
http://www.devshed.com/c/a/PHP/Using...-with-PHP/4/):
use output buffering ob_start(). measure the length of the output,
make the header, emit the buffered output.
HTTP/1.1 200 OK.
Date: Tue, 14 Feb 2006 17:20:21 GMT.
Server: Apache/1.3.34 (Ubuntu) PHP/4.4.2-1.
X-Powered-By: PHP/4.4.2-1.
Transfer-Encoding: chunked.
Content-Type: text/html; charset=iso-8859-1.
.
a7 . As you can see, there is no "Content-Length" in the response. Am I
doing something wrong here,
No. it's using chunks instead.
or could this be a bug in php? Btw. I tried
this on different servers, with the same results.


"Transfer-Encoding: chunked." is a valid alternative to "Content-Length:..."
if XMLRPC doesn't support it it's lying where it claims HTTP/1.1

Bye.
Jasen
Feb 15 '06 #2

This discussion thread is closed

Replies have been disabled for this discussion.