HTTP报文处理:解析与构建工具

需积分: 9 0 下载量 180 浏览量 更新于2024-09-03 收藏 20KB TXT 举报
"http_structo_parse.h.txt" 该文件"HTTP_STRUCTO_PARSE.h.txt"是用于处理HTTP协议的一个头文件,它包含了构建HTTP请求和响应报文的函数以及解析HTTP报文的类。文件中的代码主要涉及到了HTTP协议的基础知识,如HTTP方法类型和HTTP参数类型,同时定义了一个名为`CHttpRequestParser`的解析器类和一个名为`CHttpResponseMaker`的响应构造器类。 在HTTP协议中,主要有三种请求方法:GET、POST和响应(这里可能有误,HTTP_UTIL_METHOD_RESP可能不是标准的HTTP方法,而是自定义的表示响应的枚举值)。GET方法用于获取服务器上的资源,POST方法常用于向服务器发送数据,而响应则是服务器对客户端请求的回应。 文件中定义的`HttpMethodType`枚举列举了这些方法,`HTTP_UTIL_METHOD_NONE`通常表示没有指定的方法。`HttpParamType`枚举则用于区分获取HTTP报文的不同部分,例如获取所有参数(HTTP_UTIL_PARAM_ALL)、只获取头部参数(HTTP_UTIL_PARAM_HEADPARAM)或只获取内容(HTTP_UTIL_PARAM_CONTENT)。 `CHttpRequestParser`类可能是用来解析HTTP请求报文的,它有一个`parse`方法,接收一个字符串参数,这个字符串应该是HTTP请求报文的原始数据。解析器会从中提取出请求行、头部和可能的内容。 另一方面,`CHttpResponseMaker`类用于构造HTTP响应报文。这个类的实例化和使用示例代码显示,可以调用`make_string`方法来创建一个包含指定内容的HTTP响应字符串。这个方法接受两个字符串参数,一个是响应内容,另一个是生成的完整HTTP响应字符串。 这个文件提供了一套简单的HTTP协议处理机制,可以用于基础的HTTP通信场景,比如模拟简单的HTTP客户端和服务器交互。在实际应用中,开发者可以根据需要修改和扩展这些类,以适应更复杂的HTTP交互需求。例如,添加错误处理机制、支持更多HTTP方法、处理更多类型的HTTP头部和参数等。由于文件没有包含完整的实现,实际使用时需要结合其他代码来完成HTTP通信的完整流程。

在ros项目中添加发送websocket wss消息的功能,修改如下代码并在CmakeLists.txt中添加依赖,实现将serialized_data发送到wss://autopilot-test.t3go.cn:443/api/v1/vehicle/push/message/LFB1FV696M2L43840。main.cpp:#include "ros/ros.h" #include "std_msgs/String.h" #include <boost/thread/locks.hpp> #include <boost/thread/shared_mutex.hpp> #include "third_party/apollo/proto/perception/perception_obstacle.pb.h" #include "t3_perception.pb.h" apollo::perception::PerceptionObstacles perception_obstacles_; void perceptionCallback(const std_msgs::String& msg) { ROS_WARN("t3 perceptionCallback parse"); if (perception_obstacles_.ParseFromString(msg.data)) { double timestamp = perception_obstacles_.header().timestamp_sec(); ROS_INFO("t3 perceptionCallback timestamp %f count:%d", timestamp, perception_obstacles_.perception_obstacle().size()); std::string data; perception_obstacles_.SerializeToString(&data); VehData veh_data; veh_data.set_messagetype(5); veh_data.set_messagedes("PerceptionObstacles"); veh_data.set_contents(data); std::string serialized_data; veh_data.SerializeToString(&serialized_data); } else { ROS_ERROR("t3 perceptionCallback parse fail!"); } } int main(int argc, char **argv) { ros::init(argc, argv, "listener"); ros::NodeHandle n; ros::Subscriber sub = n.subscribe("/perception_node/perception_objects", 1000, perceptionCallback); ros::spin(); return 0; }CMakeLists.txt:cmake_minimum_required(VERSION 3.0.2) project(t3) find_package(catkin REQUIRED COMPONENTS roscpp rospy pcl_ros std_msgs third_party ) find_package(Protobuf REQUIRED) include_directories(${Protobuf_INCLUDE_DIRS} ${CMAKE_CURRENT_BINARY_DIR}/..) find_package(Boost REQUIRED) include_directories(${Boost_INCLUDE_DIRS}) set(ixwebsocket_INCLUDE_DIR "/usr/local/include/ixwebsocket") set(ixwebsocket_LIBRARIES "/usr/local/lib/libixwebsocket.a") include_directories(${ixwebsocket_INCLUDE_DIR}) include_directories(${CATKIN_DEVEL_PREFIX}/${CATKIN_GLOBAL_INCLUDE_DESTINATION}/${PROJECT_NAME}) include_directories(${CATKIN_DEVEL_PREFIX}/${CATKIN_GLOBAL_INCLUDE_DESTINATION}/smartview) catkin_package(INCLUDE_DIRS ${PROJECT_INCLUDE_DIRS} DEPENDS ${GFLAGS_LIBRARIES} ) include_directories( ${catkin_INCLUDE_DIRS} ${PROTOBUF_INCLUDE_DIR} ${PROJECT_SOURCE_DIR}/.. ) add_executable(${PROJECT_NAME}_node src/main.cpp ) add_dependencies(${PROJECT_NAME}_node ${catkin_EXPORTED_TARGETS}) target_link_libraries(${PROJECT_NAME}_node ${catkin_LIBRARIES} ${PROTOBUF_LIBRARIES} smartview_proto ) install(TARGETS ${PROJECT_NAME}_node ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} RUNTIME DESTINATION ${CATKIN_GLOBAL_BIN_DESTINATION} )

2023-06-09 上传