通过 C# 使用 C++ boost.asio 休息 API

Consume C++ boost.asio Rest API by C#

我正在休息 API 返回正确的数据,问题是我正在使用来自 C# 代码的数据。它返回错误的网关

以下是我的服务器代码

#include <ctime>
#include <iostream>

#include <string>
#include <boost/asio.hpp>

using boost::asio::ip::tcp;
using namespace std;
std::string make_daytime_string()
{
        using namespace std; // For time_t, time and ctime;
        time_t now = time(0);
        return ctime(&now);
}

int main()
{
        try
        {
                boost::asio::io_service io_service;

                tcp::acceptor acceptor(io_service, tcp::endpoint(tcp::v4(), 1313));

                for (;;)
                {
                        cout << "listening for socket" << endl;
                        tcp::socket socket(io_service);
                        acceptor.accept(socket);


                        cout << "listening for socket" << endl;
                        std::string message = make_daytime_string();
                        message = "I am a response from rest service baby !!!";
                        boost::system::error_code ignored_error;
                        boost::asio::write(socket, boost::asio::buffer(message), ignored_error);
                }
        }
        catch (std::exception& e)
        {
                std::cerr << e.what() << std::endl;
        }

        return 0;
}

为了使用它,我有以下 C# 代码

WebRequest req = WebRequest.Create("http://192.168.17.85:1313/");
req.Method = "GET";
WebResponse rep = req.GetResponse();

我似乎不明白这个问题,因为它很容易从网络浏览器中消耗,但它从这段代码返回 502(错误的网关)。

您只是简单地写入一个套接字,您的响应中没有 HTTP,浏览器“好”到足以检测到此类问题。您需要使用 HTTP 协议格式化您的代码。

请检查 RFC 2616 的 HTTP 1.1(我认为这是最常见的版本)。