내 연락처 정보
우편메소피아@프로톤메일.com
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
SOAP는 Simple Object Access Protocol의 약자이며 REST와 유사한 표준 기반 웹 서비스 액세스 프로토콜의 이전 형태입니다. 필요한 구성이 완료되면 SOAP를 활용하여 TrinityCore 서버에 명령을 보낼 수 있습니다.
SOAP를 이해하는 좋은 방법은 SOAP를 최신 REST와 비교하는 것입니다. 다음 기사에서는 이에 대해 매우 잘 설명합니다 – https://smartbear.com/blog/soap-vs-rest-whats-the-difference/.
둘 사이의 주요 차이점은 SOAP가 응답을 제공하고 페이로드를 허용하기 위해 전적으로 XML에 의존한다는 것입니다. PHP는 이 프로세스를 더 쉽게 만들기 위한 몇 가지 방법을 제공하지만 사용 사례에 따라 XML에 익숙해야 할 수도 있습니다.
월드서버.conf
구성 파일의 설정이 올바르게 지정되었는지 확인하십시오.
- # SOAP.Enable
- # Description: Enable soap service.
- # Default: 0 - (Disabled)
- # 1 - (Enabled)
- SOAP.Enabled = 1
-
- # SOAP.IP
- # Description: Bind SOAP service to IP/hostname.
- # Default: "127.0.0.1" - (Bind to localhost)
- SOAP.IP = "127.0.0.1"
-
- # SOAP.Port
- # Description: TCP port to reach the SOAP service.
- # Default: 7878
- SOAP.Port = 7878
특정 RBAC 액세스 구성에 따라 GM 명령을 사용할 수 있는 권한이 있는 사용자 계정도 필요합니다. 한 사람이 사용하는 계정보다는 이 목적을 위해 특별히 액세스가 제한된 계정을 만드는 것이 좋습니다.
참고: 이 글을 쓰는 시점에서 TC 335a는 HTTP만 지원하므로 이 방법으로 비밀(비밀번호 등)을 보내지 않도록 주의하세요. 전달된 모든 내용은 일반 텍스트로 되어 있어 누구나 읽을 수 있다고 가정합니다.
SOAP를 통해 원격으로 연결하려는 경우 보안 연결을 보장하기 위한 조치를 취해야 합니다. 한 가지 잠재적인 접근 방식은 Apache 또는 nginx를 통한 역방향 SSL 프록시를 사용하는 것입니다. 그러나 이는 이 가이드의 범위를 벗어나므로 포함되지 않습니다.
신속하게 연결을 설정하고 콘솔 명령을 테스트하는 클라이언트가 있습니다.
우편 배달부: https://www.postman.com/ (네트워크, 데스크톱 에이전트/클라이언트)
불면증:https://insomnia.rest/
나이팅게일 나이팅게일 : https://nightingale.rest/
모두 다양한 세부 정보를 제공하지만 궁극적으로는 거의 동일하게 작동합니다. Postman에 대한 특정 단계를 제공한 Jackpoz에게 감사드립니다(https://www.postman.com/).
Postman은 웹 인터페이스(localhost 요청을 수행하기 위해 설치할 수 있는 프록시 포함)와 전체 클라이언트 데스크톱 애플리케이션의 두 가지 형태로 제공됩니다. 지침은 두 경우 모두 동일합니다.
"내 작업공간"에서 "가져오기" 버튼을 찾으세요. 원본 텍스트 옵션을 사용하게 됩니다.
다음 JSON을 복사하여 텍스트 상자에 붙여넣습니다. item.request.auth.basic 아래의 자격 증명을 앞에서 언급한 GM 사용자로 업데이트했는지 확인하세요.
- {
- "info": {
- "name": "TC SOAP",
- "schema": "https://schema.getpostman.com/json/collection/v2.0.0/collection.json"
- },
- "item": [
- {
- "name": "server info",
- "request": {
- "auth": {
- "type": "basic",
- "basic": {
- "username": "CHANGEME",
- "password": "CHANGEME",
- "showPassword": false
- }
- },
- "method": "POST",
- "header": [],
- "body": {
- "mode": "raw",
- "raw": "<?xml version="1.0" encoding="utf-8"?>rn<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="urn:TC">rn<SOAP-ENV:Body>rn<ns1:executeCommand>rn<command>server info</command>rn</ns1:executeCommand>rn</SOAP-ENV:Body>rn</SOAP-ENV:Envelope>",
- "options": {
- "raw": {
- "language": "xml"
- }
- }
- },
- "url": "http://127.0.0.1:7878"
- },
- "response": []
- }
- ]
- }
TC SOAP를 가져올 컬렉션으로 생각해야 합니다. 가져오기를 클릭합니다.
그러면 올바른 HTTP 메서드(POST)와 권한 부여 및 본문 탭 아래의 세부 정보로 새 컬렉션이 채워집니다.
본문 탭에서 미리 채워져 있는 XML 페이로드 및 서버 정보 명령을 확인하세요.
"보내기" 버튼을 클릭하면 요청이 제출되고 XML 응답이 제공됩니다.
Postman 인터페이스 오른쪽에는</> 기호를 클릭하면 요청을 선택한 언어로 변환할 수 있는 코드 조각이 열립니다.
¶PHP 사용
PHP를 사용하여 TrinityCore와 상호 작용하려면 PHP 비누 확장이 설치되어 있는지 확인해야 합니다. 또한 여전히 적극적으로 지원되는 PHP 버전을 사용하고 있는지 확인하세요. 코드 예제는 PHP7.4~PHP8.1에서 테스트되었습니다.
이 모든 예에서 urn:TC URI는 WSDL 문서를 제공하지 않았기 때문에 필수 매개변수입니다.
SoapClient-https://www.php.net/manual/ko/class.soapclient.php
- $command = 'server info';
-
- $opts = [
- 'http' => [
- 'header' => "Authorization: Basic " . base64_encode("USERNAME:PASSWORD")
- ]];
-
- $client = new SoapClient($wsdl = null, [
- 'stream_context' => stream_context_create($opts),
- 'location' => 'http://127.0.0.1:7878',
- 'uri' => 'urn:TC',
- ]);
-
- try {
- $result = $client->executeCommand(new SoapParam($command, 'command'));
- } catch (Exception $e) {
- die($e->getMessage());
- }
-
- echo $result;
우리는 base64로 인코딩된 사용자 이름과 비밀번호(콜론으로 구분)가 포함된 HTTP 기본 인증 헤더를 전달하고 있다는 점에 유의하십시오. 또는 다음을 생략할 수 있습니다.stream_context
매개변수를 사용하고 대신 SoapClient 구성에 (로그인) 사용자 이름과 비밀번호를 포함합니다.
- $command = 'server info';
-
- $client = new SoapClient($wsdl = null, [
- 'location' => 'http://127.0.0.1:7878',
- 'uri' => 'urn:TC',
- 'login' => 'USERNAME',
- 'password' => 'PASSWORD',
- ]);
-
- try {
- $result = $client->executeCommand(new SoapParam($command, 'command'));
- } catch (Exception $e) {
- die($e->getMessage());
- }
-
- echo $result;
어느 접근 방식이든 괜찮습니다. 하지만 속지 마세요! Base 64 인코딩은 본질적으로 보안을 강화하지 않습니다.
SOAP 클라이언트는 연결 실패나 구성 오류만 인식할 수 있다는 점을 기억하세요.잘못된 명령을 제공했는지 알 수 없습니다.. 따라서 결과를 분석하고 의도한 결과가 성공적이었는지 아닌지를 결정하는 것은 당신에게 달려 있습니다. 출력은 콘솔에서 명령을 수행한 것과 똑같을 것입니다.
마지막으로, SOAP 확장 또는 클라이언트에 의존하지 않으려면 XML 페이로드를 구성하고 결과 XML 응답을 직접 구문 분석할 수 있습니다. 여전히 다음이 필요합니다.cURL 확장자하지만 이 기능은 기본적으로 활성화되어 있지 않아도 사용할 수 있는 경우가 많습니다.
- <?xml version="1.0" encoding="utf-8"?>
- <SOAP-ENV:Envelope
- xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
- xmlns:ns1="urn:TC">
- <SOAP-ENV:Body>
- <ns1:executeCommand>
- <command>server info</command>
- </ns1:executeCommand>
- </SOAP-ENV:Body>
- </SOAP-ENV:Envelope>
- $curl = curl_init();
-
- curl_setopt_array($curl, [
- CURLOPT_POSTFIELDS => $payload, // $payload is the XML provided above
- CURLOPT_URL => 'http://127.0.0.1:7878',
- CURLOPT_TIMEOUT => 0,
- CURLOPT_CUSTOMREQUEST => 'POST',
- CURLOPT_HTTPHEADER => [
- "Authorization: Basic " . base64_encode("{$user}:{$pass}"),
- 'Content-Type: application/xml',
- ],
- ]);
-
- $response = curl_exec($curl);
- curl_close($curl);
- echo $response;