网站首页 文章专栏 网络请求.md
网络请求.md
创建于:2021-07-04 08:45:18 更新于:2024-05-06 23:41:22 羽瀚尘 484
Poco::Net::HTTPRequest request(Poco::Net::HTTPRequest::HTTP_POST, m_uri, Poco::Net::HTTPMessage::HTTP_1_1);
  Poco::Net::HTMLForm form;
  form.setEncoding(Poco::Net::HTMLForm::ENCODING_MULTIPART);

  // 设置 headers
  auto header = make_tof4_header();
  for(auto iter = header.begin(); iter != header.end(); iter++) {
    request.add(iter->first, iter->second);
  }

  // 设置 form data
  form.set("EmailType", m_email_type);
  form.set("From", m_from);
  form.set("To", Poco::cat(std::string(","), m_to.begin(), m_to.end()));
  form.set("CC", Poco::cat(std::string(","), m_cc.begin(), m_cc.end()));
  form.set("Bcc", Poco::cat(std::string(","), m_bcc.begin(), m_bcc.end()));
  form.set("Title", m_title);
  form.set("Content", m_content);
  form.set("BodyFormat", m_body_format);

  // 设置 file
  for(auto iter = m_attachment.begin(); iter != m_attachment.end(); iter++) {
    form.addPart("file", new Poco::Net::FilePartSource(*iter));
  }
  form.prepareSubmit(request);

  Poco::URI uri(m_uri);
  Poco::Net::HTTPClientSession *httpSession = new Poco::Net::HTTPClientSession(uri.getHost(), uri.getPort());
  httpSession->setTimeout(Poco::Timespan(3, 0));
  form.write(httpSession->sendRequest(request));

  Poco::Net::HTTPResponse res;
  std::istream &is = httpSession->receiveResponse(res);

  std::string res_string;
  Poco::StreamCopier::copyToString(is, res_string);
  Json::Value res_json;
  Json::Reader json_reader;

  if (!json_reader.parse(res_string, res_json)) {
    return "parse response failed!";
  }
  if (0 != res_json["ErrCode"].asInt()) {
    return res_json["ErrMsg"].asString();
  }
  return "ok";