Analiza una solicitud HTTP que incluye contenido de "application/xml".
Muestra de código
C++
#include <google/cloud/functions/http_request.h>
#include <google/cloud/functions/http_response.h>
#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/xml_parser.hpp>
#include <sstream>
namespace gcf = ::google::cloud::functions;
gcf::HttpResponse http_xml(gcf::HttpRequest request) { // NOLINT
std::istringstream is(request.payload());
// Use the Boost.PropertyTree XML parser, this is adequate for a small
// example, but application developers may want to consider a more robust
// parser for production code.
boost::property_tree::ptree data;
boost::property_tree::read_xml(is, data);
auto name = data.get<std::string>("name", "World");
return gcf::HttpResponse{}
.set_header("content-type", "text/plain")
.set_payload("Hello " + name);
}
Go
// Package http provides a set of HTTP Cloud Functions samples.
package http
import (
"encoding/xml"
"fmt"
"html"
"io/ioutil"
"net/http"
)
// ParseXML is an example of parsing a text/xml request.
func ParseXML(w http.ResponseWriter, r *http.Request) {
var d struct {
Name string
}
b, err := ioutil.ReadAll(r.Body)
if err != nil {
http.Error(w, "Could not read request", http.StatusBadRequest)
}
if err := xml.Unmarshal(b, &d); err != nil {
http.Error(w, "Could not parse request", http.StatusBadRequest)
}
if d.Name == "" {
d.Name = "World"
}
fmt.Fprintf(w, "Hello, %v!", html.EscapeString(d.Name))
}
Java
import com.google.cloud.functions.HttpFunction;
import com.google.cloud.functions.HttpRequest;
import com.google.cloud.functions.HttpResponse;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.net.HttpURLConnection;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.xml.sax.SAXException;
public class ParseXml implements HttpFunction {
private static DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
// Parses a HTTP request in XML format
// (Responds with a 400 error if the HTTP request isn't valid XML.)
@Override
public void service(HttpRequest request, HttpResponse response)
throws IOException, ParserConfigurationException {
try {
DocumentBuilder docBuilder = dbFactory.newDocumentBuilder();
var writer = new PrintWriter(response.getWriter());
// Get request body
InputStream bodyStream = new ByteArrayInputStream(
request.getInputStream().readAllBytes());
// Parse + process XML
Document doc = docBuilder.parse(bodyStream);
writer.printf("Root element: %s", doc.getDocumentElement().getNodeName());
} catch (SAXException e) {
response.setStatusCode(HttpURLConnection.HTTP_BAD_REQUEST);
return;
}
}
}
Node.js
/**
* Parses a document of type 'text/xml'
*
* @param {Object} req Cloud Function request context.
* @param {Object} res Cloud Function response context.
*/
exports.parseXML = (req, res) => {
// Convert the request to a Buffer and a string
// Use whichever one is accepted by your XML parser
const data = req.rawBody;
const xmlData = data.toString();
const {parseString} = require('xml2js');
parseString(xmlData, (err, result) => {
if (err) {
console.error(err);
res.status(500).end();
return;
}
res.send(result);
});
};
Python
import json
import xmltodict
def parse_xml(request):
""" Parses a document of type 'text/xml'
Args:
request (flask.Request): The request object.
Returns:
The response text, or any set of values that can be turned into a
Response object using `make_response`
<http://flask.pocoo.org/docs/1.0/api/#flask.Flask.make_response>.
"""
data = xmltodict.parse(request.data)
return json.dumps(data, indent=2)
¿Qué sigue?
Para buscar y filtrar muestras de código para otros productos de Google Cloud, consulta el navegador de muestra de Google Cloud.