Web service HTTP/1.1 400 Bad Request
Los Web Services permiten a distintas aplicaciones, de diferentes orígenes, comunicarse entre ellos sin necesidad de escribir programas costosos, y que no aparezcan HTTP/1.1 400 Bad Request, esto porque la comunicación se hace con XML.
Si usamos SOAP para estabecer la comunicación con el servicio, la información se enviará en un formato similar al siguiente :
< soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
< soap:Header/>
< soap:Body>
< GrabarPedido xmlns="http://tempuri.org/">
< cadXMLEntrada>
< contenido de la petición>
< /cadXMLEntrada>
< /GrabarPedido>
< /soap:Body>
< /soap:Envelope>
EL contenido de la petición se estructura en una cadena XML, quedando el mensaje de la request del siguiente modo :
< soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
< soap:Header/>
< soap:Body>
< GrabarPedido xmlns="http://tempuri.org/">
< cadXMLEntrada>
< PETICION LOGIN="usuario" PASSWORD="password" VERSION="2.2" ID_COMUNICACION="">
< PEDIDO_CAB PEDIDO="" REFERENCIA="E2200128-X" CLAVE="PE " FECHA="16/01/2012" NOMCONS="SCR Tools Machines" DOMCONS="Autovía Sevilla-Malaga, 3" POBCONS="Sevilla" CPCONS="41016" PAISCONS="" TELCONS="955121212" SEMPOR="P" REEMBOLSO="1012.23" OBSERVACIONES="Llamar para concertar entrega" BULTOS="3" VOLUMEN="13.243" KILOS="4085.6" FECHA_SERVICIO="19/01/2012" SEGURO_TODO_RIESGO="S" ADR="N">
< PEDIDO_LIN LINEA="1" ARTICULO="T001M4" UNIDADES="1" LOTE="LT1076" CADUCA="" SERIE="" TIPO_MERCANCIA="" > < PEDIDO_LIN LINEA="2" ARTICULO="T038X1" UNIDADES="28" LOTE="" CADUCA="" SERIE="" TIPO_MERCANCIA="" > < /PEDIDO_CAB>
< /PETICION>
< /cadXMLEntrada>
< /GrabarPedido>
< /soap:Body>
< /soap:Envelope>
Así el contenido de la request se enviará en formato XML. Según la forma en la que el web service espera la información, podremos obtener el siguiente error :
HTTP/1.1 400 Bad Request
Este error es provocado porque el web service espera el contenido de la petición como un string y no como un xml, por lo que deberemos encapsular el contenido de la petición con < ![CDATA[ contenido de la petición ]]> . El ejemplo anterior quedaría del siguiente modo :
< soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
< soap:Header/>
< soap:Body>
< GrabarPedido xmlns="http://tempuri.org/">
< cadXMLEntrada>
< ![CDATA[< PETICION LOGIN="usuario" PASSWORD="password" VERSION="2.2" ID_COMUNICACION="">
< PEDIDO_CAB PEDIDO="" REFERENCIA="E2200128-X" CLAVE="PE " FECHA="16/01/2012" NOMCONS="SCR Tools Machines" DOMCONS="Autovía Sevilla-Malaga, 3" POBCONS="Sevilla" CPCONS="41016" PAISCONS="" TELCONS="955121212" SEMPOR="P" REEMBOLSO="1012.23" OBSERVACIONES="Llamar para concertar entrega" BULTOS="3" VOLUMEN="13.243" KILOS="4085.6" FECHA_SERVICIO="19/01/2012" SEGURO_TODO_RIESGO="S" ADR="N">
< PEDIDO_LIN LINEA="1" ARTICULO="T001M4" UNIDADES="1" LOTE="LT1076" CADUCA="" SERIE="" TIPO_MERCANCIA="" > < PEDIDO_LIN LINEA="2" ARTICULO="T038X1" UNIDADES="28" LOTE="" CADUCA="" SERIE="" TIPO_MERCANCIA="" > < /PEDIDO_CAB>
< /PETICION>]]>
< /cadXMLEntrada>
< /GrabarPedido>
< /soap:Body>
< /soap:Envelope>
De este modo, el web service recibirá la request en el formato que espera y no obtendremos el error HTTP/1.1 400 Bad Request
.
4 Comentarios
lierly
Hola: soy nuevo en esto de los web services y tengo una duda. Cómo es que se procesa (en php) esta petición de HTTP Request dentro del web services ??? gracias por su respuesta
Jorge Canez
Como eliminar el wrong question o bad request
Ruben
Gracias a ti Jorge, Síguenos en Twitter o Facebook :D
Jorge Jiménez
Gracias por la aportación, me acaba de servir mucho. Saludos...