필자의 Perl 백엔드에서 PHP-back RPC를 사용하기 쉽도록 XML-RPC 서버를 사용하려고합니다. 그러나 문제가 생겼고 어떤 부분이 버그인지는 확실하지 않습니다. 필자가 드루팔 (Drupal에 전달해야하는 변수 중 일부는 때로는 숫자로 가득 찬 문자열이고 Drupal XML-RPC 서버는 문자열이 숫자로 가득 차면 올바르게 형성되지 않는다는 오류를 반환합니다.XML :: RPC와 Drupal에서 문자열 자릿수를 어떻게 처리해야합니까?
내 Perl 코드는 지금 이와 비슷한 형태로 보입니다.
use strict;
use warnings;
use XML::RPC;
use Data::Dumper;
my $xmlrpc = XML::RPC->new(URL);
my $result = $xmlrpc->call(FUNCTION, 'hello world', '9876352345');
print Dumper $result;
출력은 다음과 같습니다
<param>
<value>
<i4>9876352345</i4>
</value>
:
$VAR1 = {
'faultString' => 'Server error. Invalid method parameters.',
'faultCode' => '-32602'
};
나는 그것이 수신 데이터 밖으로 드루팔 XML-RPC 서버 인쇄를 할 때, 나는 두 번째 인수는 I4로 입력되는 것을 알 수
드루팔 (Drupal이 아이템 처리를 마쳤을 때 문자열 대신 int로 그 변수를 타이핑하는 것 같습니다. 이것은 나중에 Drupal이 변수 값이 문자열에 대해 제대로 형성되었는지 확인하려고 시도하면 is_string PHP 함수는 false를 반환합니다.
foreach ($signature as $key => $type) {
$arg = $args[$key];
switch ($type) {
case 'int':
case 'i4':
if (is_array($arg) || !is_int($arg)) {
$ok = FALSE;
}
break;
case 'base64':
case 'string':
if (!is_string($arg)) {
$ok = FALSE;
}
break;
case 'boolean':
if ($arg !== FALSE && $arg !== TRUE) {
$ok = FALSE;
}
break;
case 'float':
case 'double':
if (!is_float($arg)) {
$ok = FALSE;
}
break;
case 'date':
case 'dateTime.iso8601':
if (!$arg->is_date) {
$ok = FALSE;
}
break;
}
if (!$ok) {
return xmlrpc_error(-32602, t('Server error. Invalid method parameters.'));
}
}
나는이 문제가 어느 부분에 놓여 있는지 또는 내가 사용해야 할 다른 것이 있는지에 대해 확신 할 수 없다. Perl 측의 요청이 i4 대신 문자열로 입력해야합니까, 아니면 문자열 유형에 대해 너무 엄격한 요청의 드루팔 측입니까? 내 생각 엔이 문제는 후자이지만 XML-RPC 서버가 어떻게 작동하는지 확실히 알 수는 없습니다.
고마워요! 나는 RPC :: XML 라이브러리를 이전에 사용하고 있었고, 나는 다시 그것으로 바꿀 것이다. –