Tôi đã cố gắng để có được điều này để làm việc cho một vài ngày tuy nhiên tôi tiếp tục nhận được một lỗi 400 từ máy chủ.BOOST ASIO POST HTTP YÊU CẦU - tiêu đề và nội dung
Về cơ bản, những gì tôi đang cố gắng làm là gửi một yêu cầu POST http đến một máy chủ yêu cầu một thân yêu cầu JSON với một vài thuộc tính.
Đây là những libs Tôi hiện đang sử dụng
CẬP NHẬT --- 7/23/13 10:00 chỉ nhận thấy tôi đang sử dụng giao thức TCP thay vì HTTP không chắc chắn có bao nhiêu điều này sẽ ảnh hưởng đến cuộc gọi HTTP nhưng tôi không thể tìm thấy bất kỳ ví dụ về các khách hàng sử dụng HTTP tinh khiết với BOOST :: ASIO
#include <iostream>
#include <istream>
#include <ostream>
#include <string>
#include <boost/asio.hpp>
#include <sstream>
#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/json_parser.hpp>
using boost::property_tree::ptree; using boost::property_tree::read_json; using boost::property_tree::write_json;
using boost::asio::ip::tcp;
Thiết lập mã
// Get a list of endpoints corresponding to the server name.
tcp::resolver resolver(io_service);
tcp::resolver::query query(part1, "http");
tcp::resolver::iterator endpoint_iterator = resolver.resolve(query);
// Try each endpoint until we successfully establish a connection.
tcp::socket socket(io_service);
boost::asio::connect(socket, endpoint_iterator);
// Form the request. We specify the "Connection: close" header so that the
// server will close the socket after transmitting the response. This will
// allow us to treat all data up until the EOF as the content.
boost::asio::streambuf request;
std::ostream request_stream(&request);
JSON BODY
ptree root, info;
root.put ("some value", "8");
root.put ("message", "value value: value!");
info.put("placeholder", "value");
info.put("value", "daf!");
info.put("module", "value");
root.put_child("exception", info);
std::ostringstream buf;
write_json (buf, root, false);
std::string json = buf.str();
HEADER VÀ KẾT NỐI YÊU CẦU
request_stream << "POST /title/ HTTP/1.1 \r\n";
request_stream << "Host:" << some_host << "\r\n";
request_stream << "User-Agent: C/1.0";
request_stream << "Content-Type: application/json; charset=utf-8 \r\n";
request_stream << json << "\r\n";
request_stream << "Accept: */*\r\n";
request_stream << "Connection: close\r\n\r\n";
// Send the request.
boost::asio::write(socket, request);
tôi đặt giá trị giữ chỗ tuy nhiên nếu bạn thấy bất cứ điều gì mà không làm việc trong mã của tôi mà nhảy ra xin vui lòng cho tôi biết tôi không có ý tưởng tại sao tôi tiếp tục nhận được một 400, yêu cầu xấu.
thông tin về giàn khoan
C++
WIN7
VISUAL STUDIO
Trước khi gửi toàn bộ yêu cầu, hãy in vào một số nhật ký hoặc bảng điều khiển và xem nó có chính xác hay không. –
Bạn có đang viết 'json' giữa các trường tiêu đề không? – PSIAlt
đây là nơi tệp json đang được nhập vào 'request_stream << json <<" \ r \ n ";' Tôi đã xem bộ đệm request_stream thông qua một trình gỡ lỗi cùng với bộ đệm yêu cầu. Tất cả mọi thứ có vẻ chính xác về nội dung tuy nhiên có một số không gian lạ bạn nghĩ rằng có thể có tác động? – progrenhard