通过 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(我认为这是最常见的版本)。
我正在休息 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(我认为这是最常见的版本)。