2017-04-10 7 views
1

xml-rpc와 Laravel 5.4를 함께 사용하려고합니다. Open HttpRequester를 사용하여 Laravel에 XML 요청을 보내고 있습니다. 200 OK 상태 코드를 반환하지만 요청을 처리 할 수 ​​없습니다. 데이터.Laravel 빈 요청

나는 다음과 같은 내용으로, 하나의 방법 (testMethod)와 컨트롤러로 라우팅 요청을 받았습니다했습니다 :

public function testMethod(Request $request) {   
    $req = xmlrpc_decode_request($request, $method); 
    print_r($req); 
    print_r($request->toArray());   
} 

내 XML은 다음과 같습니다

<?xml version="1.0" encoding="UTF-8"?> 
<methodCall> 
    <methodName>testMethod</methodName> 
    <params> 
     <param> 
      <value> 
       <string>Test value 1</string> 
      </value> 
     </param> 
    </params> 
</methodCall> 

이 요청 만을 반환 빈 배열.

무엇이 잘못 되었나요?

편집 : 몇 가지 추가 코드를 추가

.

경로 :

Route::post('/request', '[email protected]'); 

원시 요청 :

POST http://localhost/laratest/public/index.php/request 
User-Agent:/
Host: localhost 
Content-Type: text/xml 
<?xml version="1.0" encoding="UTF-8"?> 
<methodCall> 
    <methodName>testMethod</methodName> 
    <params> 
     <param> 
      <value> 
       <string>Test value 1</string> 
      </value> 
     </param> 
    </params> 
</methodCall> 

응답 : 브라우저 모드 (I 응답을 볼 열기 HttpRequester을 사용하고 있습니다) []

일반 텍스트 모드 :

Sfdump = window.Sfdum p || (함수 (doc) {var refStyle = doc.createElement ('style'), rxEsc = /([.*+?^${}()|[]/\])/g, idRx =/\ bsf-dump - 'Ctrl', addEventListener = function (e, n, n) - 검색 결과가 표시되지 않는 경우, appendChild (refStyle); if (! doc.addEventListener) {addEventListener = function (cb)}) {e.addEventListener (n, cb, false);} (doc.documentElement.firstElementChild || doc.documentElement.children [ (e) {e.preventDefault = function() {e.returnValue = false;}; e.target = e.srcElement; 콜백 (e)) ('sf-dump-compact'== oldClass) if ('sf-dump-compact'== oldClass) {if sf-dump-compact} == oldClass) {sf-dump-expanded '== oldClass} {화살표 ='▶ '; newClass ='sf-dump-compact ';} else { false를 반환; } a.lastChild.innerHTML = arrow; s.className = newClass; if (recursive) {try {a = s.querySelectorAll ('.'+ oldClass); for (a [s] .className! == newClass) {a [s] .className = newClass; a [s]. 이전 Sibling.lastChild.innerHTML = arrow; }}} catch (e) {}} true를 반환합니다. }; return 함수 (root, x) {root = doc.getElementById (root); ($ r ','\ $ 1 ') +', 'm') var indentRx = 새로운 RegExp ('^ ('+ (root.getAttribute ('data-indent-pad') | 옵션 = { "maxDepth": 1, "maxStringLength": 160, "fileLinkFormat": false}, elt = root.getElementsByTagName ('A'), len = elt.length, i = 0, s, h, t = [ ]; while (i < len) t.push (elt [i ++]); for (i in x) {options [i] = x [i]; ('A'== e.target.tagName) {f (e.target, e)}} else if ('A' else if (e.target.nextElementSibling & & 'A'== e.target.nextElementSibling.tagName) {f (e .target.nextElementSibling, e, true);}})); }; 함수 isCtrlKey (e) {return e.ctrlKey || e.metaKey; } addEventListener (root, 'mouseover', function (e) {if ('! = refStyle.innerHTML) {refStyle.innerHTML =' ';}})); else if (a = idRx.exec (a. e, c)).className)) {try {refStyle.innerHTML = 'pre.sf-dump.'+ a [0] + '{background-color : # B729D9; 색상 : #FFF! 중요; border-radius : 2px} '; } catch (e) {}}}); {(toggle (a, isCtrlKey)}}) {if (toggle (a, e, c) {if (예 :).) var = doc.getElementById (a.getAttribute ('href'). substr (1)), s = r.previousSibling, f = r.parentNode, t = a.parentNode; t.replaceChild ((indentRx); t = t.firstChild.nodeValue.match (indentRx); if (indentRx); f.firstChild.nodeValue.match (indentRx); (rxEsc, '\ $ 1') (새로운 RegExp ('^'+ f [0] .replace (rxEsc, '\ $ 1'), if (c) {}} if ('sf-dump-compact'== r.className) {if (s, isCtrlKey (e) (doc.getSelection) {try {doc.selection.empty();}} else if (doc.getSelection) {try {doc.getSelection(). removeAllRanges() (/\bsf-dump-str-toggle\b/.test(a.className)) {e.preventDefault(); e = a.parentNode.parentNode; e.classN ame = e.className.replace (/ sf-dump-str- (expand | collapse) /, a.parentNode.className); }})); elt = root.getElementsByTagName ('SAMP'); len = elt.length; i = 0; while (i < len) t.push (elt [i ++]); len = t.length; for (i = 0; i < len; ++ i) {elt = t [i]; if ('SAMP'== elt.tagName) {elt.className = 'sf-dump-expanded'; a = elt.previousSibling || {}; if ('A'! = a.tagName) {a = doc.createElement ('A'); a.className = 'sf-dump-ref'; elt.parentNode.insertBefore (a, elt); } else {a.innerHTML + = ''; } a.title = (a.title? a.title + '\ n [': '[') + keyHint + '+ click] 모든 자식을 펼치십시오'; a.innerHTML + = '▼'; a.className + = 'sf-dump-toggle'; x = 1; if ('sf-dump'! = elt.parentNode.className) {x + = elt.parentNode.getAttribute ('data-depth')/1; } elt.setAttribute ('data-depth', x); if (x> options.maxDepth) {toggle (a); }} else if ('sf-dump-ref'== elt.className & & (a = elt.getAttribute ('href'))) {a = a.substr (1); elt.className + = ''+ a; if (/[[{]$/.test(elt.previousSibling.nodeValue)) {a = a! = elt.nextSibling.id & & doc.getElementById (a); {s = a.nextSibling; elt.appendChild (a); s.parentNode.insertBefore (a, s); if (/^[@#]/.test(elt.innerHTML)) {elt.innerHTML + = '▶'; } else {elt.innerHTML = '▶'; elt.className = 'sf-dump-ref'; } elt.className + = 'sf-dump-toggle'; } catch (e) {if ('&'== elt.innerHTML.charAt (0)) {elt.innerHTML = '& hellip;'; elt.className = 'sf-dump-ref'; }}}}} if (0> = options.maxStringLength) {return; } try {elt = root.querySelectorAll ('. sf-dump-str'); len = elt.length; i = 0; t = []; while (i < len) t.push (elt [i ++]); len = t.length; for (i = 0; i < len; ++ i) {elt = t [i]; s = elt.innerText || elt.textContent; x = s.length - options.maxStringLength; if (0 < x) {h = elt.innerHTML; elt [elt.innerText? 'innerText': 'textContent'] = s.substring (0, options.maxStringLength); elt.className + = 'sf-dump-str-collapse'; elt.innerHTML = ''+ h + '◀'+ 'elt.innerHTML +'▶ '; }}} catch (e) {}}; })(문서); pre.sf-dump {display : block; white-space : pre; 패딩 : 5px; } pre.sf-dump span {디스플레이 : 인라인; } pre.sf-dump .sf-dump-compact {display : none; } pre.sf-dump abbr {텍스트 장식 : 없음; 국경 : 없음; 커서 : 도움말; } pre.sf-dump a {text-decoration : none; 커서 : 포인터; border : 0; 개요 : 없음; color : 상속; } pre.sf-dump .sf-dump-ellipsis {display : 인라인 블록; 오버플로 : 보이는; 텍스트 오버플로 : 줄임표; 최대 폭 : 5em; white-space : nowrap; 오버 플로우 : 숨김; 세로 정렬 : 위쪽; } pre.sf-dump 코드 {display : 인라인; 패딩 : 0; 배경 : 없음; } .sf-dump-str-collapse .sf-dump-str-collapse {display : none; } .sf-dump-str-expand .sf-dump-str-expand {display : none; } pre.sf-dump, pre.sf-dump .sf-dump-default {background-color : #fff; 색상 : # 222; 라인 높이 : 1.2em; font-weight : normal; 글꼴 : 12px Monaco, Consolas, monospace; 단어 감싸기 : 단어 끊기; white-space : pre-wrap; 위치 : 상대적; z-index : 100000} pre.sf-dump .sf-dump-num {color : # a71d5d} pre.sf-dump .sf-dump-const {color : # 795da3} str {color : # df5000} pre.sf-dump .sf-dump-cchr {color : # 222} pre.sf-dump .sf-dump-note {color : # a71d5d} pre.sf-dump .sf-dump pref-dump-security {color : # 795da3} pre.sf-dump-public-color {# : # 795da3} dump-private {color : # 795da3} pre.sf-dump .sf-dump-meta {color : # b729d9} pre.sf-dump .sf-dump-key {color : # df5000} pre.sf-dump.SF-덤프 인덱스 {색상 : #의 a71d5d} [] Sfdump ("SF-덤프 - 2001561441")

+0

http://php.net /manual/en/function.xmlrpc-decode-request.php -이 함수는 사용상의 책임하에 사용되어야합니다. 어쨌든이 기능은 무엇을 기대합니까? SOAP을 사용하는 경우 SOAP 라이브러리를 사용할 수 있습니다. JSON-json_decode 등을 사용하는 경우 –

+0

저는 웹 서비스의 초보자입니다. 알아 내려고합니다. 내 고용주가 구현하고자하는 xml-rpc를 사용해야합니다. xml_rpc_decode_request 및 xml_rpc_encode_request는 실험적이지만, 문제가 있다면 print_r ($ request-> toArray)가 정상적으로 작동하지만 그렇지 않습니다. –

+0

'print_r' 대신'dd ($ request)'사용 –

답변

1

난 당신이 원시 데이터를 게시하는 경우 $request->getContent();를 사용할 수 있다고 생각