2014-06-06 11 views
1

일주일 전에 이더넷 실드로 Arduino MEGA 2560으로 새로운 프로젝트를 시작했습니다. 내 서버에 WOL을 보낼 수 있지만 이제 JSON-RPC 명령으로 내 XBMC 서버에 PING을 수행하려고합니다. 내 크롬 브라우저와 나는 때라도으로 서버를 확인 할 수있어 HTTP GET 요청 : 이제XBMC와 Arduino를 확인하십시오.

{"id":1,"jsonrpc":"2.0","result":"pong"} 

내가 시도 :

http://192.168.5.34/jsonrpc?request={"jsonrpc": "2.0", "id": 1, "method": "JSONRPC.Ping"} 

그리고 나는 XBMC 서버에서 다시 깨끗한 PONG을 얻을 결과로

0,123,516하십시오 가지고 다음 리턴 내 아두 이노와

EthernetClient client; 
IPAddress server(192,168,5,34); 
if (client.connect(server, 80)) 
{ 
    Serial.println("Connecting to Client..."); 
    client.print("GET /jsonrpc?request={%22jsonrpc%22:%20%222.0%22,%20%22id%22:%201,%20%22method%22:%20%22JSONRPC.Ping%22} HTTP/1.1\r\n"); 
    client.print("Host: 192.168.5.34\r\n"); 
    client.print("User-Agent: Mozilla/5.0\r\n"); 
    client.print("Connection: close\r\n\r\n"); 
} 
else 
    Serial.println("Client Connection Failed!"); 

: 함수에 포함 된 다음 코드를 사용하여 내 아두 이노와 함께이 작업을 수행하는

HTTP/1.1 401 Unauthorized 
Content-Length: 0 
Connection: close 
WWW-Authenticate: Basic realm=XBMC 
Date: Fri, 06 Jun 2014 21:33:24 GMT 

내 Arduino로 Google에 GET 요청을 할 수 있으므로 실제로 XBMC가 내 GET 요청을 받아들이지 않습니다. 누구나 왜 그런 생각을 가지고 있니? Wireshark를 사용하여 서버의 네트워크 데이터를 스니핑하고 요청 및 리턴은 Wireshark에 있습니다.

GET 또는 POST를 통해 XBMC 서버에 로그인하는 방법이 있습니까?

도움 주셔서 감사합니다. :)

답변

1
WWW-Authenticate: Basic realm=XBMC 

이것은 서버가 사용자 액세스 에이전트 (이 경우 Arduino)에 기본 액세스 인증을 사용하여 인증하도록 요청했음을 의미합니다.
이 라인을 추가해도 트릭해야한다 : 사용자 이름과 비밀번호 (76 문자/라인에 한정되지 않고 제외보다 정확하게 Base64로의 RFC2045-MIME 변이체 사용)

xxxxxxxxxxxxxxxxxxxx는 Base64로 인코딩
client.print("Authorization: Basic xxxxxxxxxxxxxxxxxxxx\r\n"); 

한다. 그것을 얻으려면, 당신은 당신의 브라우저에서 요청을 보내는 동안이 요청 헤더를 캡처 와이어 샤크를 사용하거나 생성 할 수 있습니다

  1. 확인 사용자 이름/암호에 대한 XBMC 설정 (설정> 서비스> 웹 서버)에서. 기본적으로 xbmc : xbmc입니다.
  2. http://www.motobit.com/util/base64-decoder-encoder.asp으로 이동하고 첫 번째 입력란에 사용자 이름과 비밀번호를 입력하십시오. 형식은 username:password입니다. xbmc:xbmc. 인 코드 옵션을 선택하고 행당 최대 문자 수 :을 큰 값으로 변경하십시오. 예 : 500을 입력하고 을 입력하십시오. 소스 데이터를으로 변환하십시오.
  3. 복사 Base64로 표현 (xbmc:xbmc 것이 eGJtYzp4Ym1j 될 것입니다 및 머리글에서 사용 예 :

    client.print ("권한 부여 : 기본 eGJtYzp4Ym1j의 \ r \ n을");

또한 base64 인코딩에 대한 https://github.com/adamvr/arduino-base64 라이브러리를 사용할 수 있습니다.

는 IT가 여러분의 브라우저에서 작동 왜 이유가 이미 인증 된 수이다.

+0

고마워! 그 트릭을했다.나는 여전히 기본 사용자 이름을 사용하기 때문에 당신이 내게 준 라인을 추가했다 : password :) Arduino-base64 라이브러리는 훌륭한 것으로도 밝혀졌다. – Reggi