EasyDarwin는 클라이언트와의 상호 작용을 달성하기 위해 사용하는 고객을위한 인터페이스를 제공합니다. 예를 들어, 다음과 같이 EasyDarwin 인터페이스 문서 버전 8.1.0에있어서, 플러그 유동은 인터페이스의리스트를 획득 :
우리는 위의 인터페이스를 테스트 할 수 있습니다. 먼저 "를 입력 (예 : QQ 브라우저 등) 브라우저 시작 EasyDarwin 서버를 시작 http://127.0.0.1:10008/api/v1/pushers을 (형식" '미디어 서버 컴퓨터의 IP 스트리밍': ' easydarwin.ini HTTP '+'인터페이스 메시지 ')에서 포트 번호 설정, 브라우저 표시를 다음과 같은 정보를 볼 수를 입력하고 Enter 키를 누릅니다. 더 푸시 스트림이 없기 때문에, 다음에 표시되는 정보는, 총 0 행 아니다. 이러한 응답 메시지가 브라우저 EasyDarwin 서버가 'API / V1 / 푸셔 "메시지가 반환됩니다 수신에 전송됩니다 보여줍니다. 우리는이 인터페이스는 정상입니다 볼 수 있습니다.
우리 옆에있는 인터페이스를 기반으로 C ++ 클라이언트를 작성하기 위해, 예를 들어 플러그 흐름의 목록을 얻을. 새로운 콘솔 프로그램은 vs2015에서 다음 코드를 입력합니다. 참조 코드 " 간단한의 C ++ 구현 HTTP GET 및 POST 클래스를 요청 "
HttpRequest.h
#pragma once
#include <string>
#include <vector>
class HttpRequest
{
public:
HttpRequest(const std::string& ip, int port);
~HttpRequest(void);
std::string HttpGet(std::string req); //进行Http的GET请求
private:
std::string m_ip; //需要连接的http服务器的IP
int m_port; //需要连接的http服务器的端口号
};
HttpRequest.cpp
#include "HttpRequest.h"
#include <WinSock.h>
#include <iostream>
#pragma comment(lib, "ws2_32.lib")
HttpRequest::HttpRequest(const std::string& ip, int port) : m_ip(ip), m_port(port)
{
}
HttpRequest::~HttpRequest(void)
{
}
//进行Http的GET请求
std::string HttpRequest::HttpGet(std::string req)
{
std::string ret = ""; //返回Http的Response(响应)
try
{
/*进行socket初始化*/
WSADATA wData;
::WSAStartup(MAKEWORD(2, 2), &wData);
SOCKET clientSocket = socket(AF_INET, 1, 0);
struct sockaddr_in ServerAddr = { 0 };
ServerAddr.sin_addr.s_addr = inet_addr(m_ip.c_str());
ServerAddr.sin_port = htons(m_port);
ServerAddr.sin_family = AF_INET;
int errNo = connect(clientSocket, (sockaddr *)&ServerAddr, sizeof(ServerAddr)); //连接服务器
if (0 == errNo) //如果成功连接上服务器
{
std::string strSend = " HTTP/1.1\r\n"
"Host: 192.168.1.104:10008\r\n"
"Connection: keep-alive\r\n"
"Cache-Control: max-age=0\r\n"
"Upgrade-Insecure-Requests: 1\r\n"
"User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3732.400 QQBrowser/10.5.3819.400\r\n"
"Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8\r\n"
"Accept-Encoding: gzip, deflate\r\n"
"Accept-Language: zh-CN,zh;q=0.9\r\n"
"Cookie: token=42C0EN0ZR\r\n\r\n";
strSend = "GET " + req + strSend;
errNo = send(clientSocket, strSend.c_str(), strSend.length(), 0); //发送缓冲区strSend中的信息给服务器
if (errNo > 0)
{
std::cout << "发送成功" << std::endl;
}
else
{
std::cout << "发送失败" << std::endl;
//std::cout << "errNo:" << errNo << std::endl;
return ret;
}
int buf_size = 5000;
char *bufRecv = new char[buf_size](); //申请buf_size大小的空间并初始化为0,将指针bufRecv指向该空间
errNo = recv(clientSocket, bufRecv, buf_size, 0);
if (errNo > 0) // 如果接收响应成功,则返回接收的数据内容
{
ret = bufRecv;
delete[] bufRecv;
}
else //如果接收响应失败
{
std::cout << "接收失败" << std::endl;
delete[] bufRecv;
//std::cout << "errNo:" << errNo << std::endl;
return ret;
}
}
else //如果连接不上服务器
{
errNo = WSAGetLastError();
std::cout << "errNo:" << errNo << std::endl;
}
// socket环境清理
::WSACleanup();
}
catch (...)
{
return "";
}
return ret;
}
MAIN.CPP
#include "HttpRequest.h"
#include <iostream>
#include <Windows.h>
int main(int argc, char *argv[])
{
HttpRequest httpReq("127.0.0.1", 10008);
std::string res = httpReq.HttpGet("/api/v1/pushers");
std::cout << res << std::endl;
return 0;
}
실행, 코드 완성을 입력 컴파일 한 후, 당신은으로 다음되는 콘솔 출력은 클라이언트의 목록을 얻는 것을 증명 볼 수 있습니다 성공 EasyDarwin를 플러그인을 흐른다.
클라이언트 만 메시지는 서버가 성공적으로 응답을받을 수 없습니다에 "/ API / V1 / 푸셔 가져 오기", 및 HTTP 헤더를 전송해야한다면 여기서 우리는 문제를주의해야합니다. 캡처에 의해 전송 된 데이터를 사용하여 Wireshark와 클라이언트가 데이터 전송은 다음과 같이 볼 수있다, 또한 다른 많은 것들을 만들어, "GET / API / V1 / 푸시 버튼"을 추가하여 볼 수 있습니다.