Web service HTTP/1.1 400 Bad Request

PHP   |   4 Comentarios

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.

¿Te ha gustado el artículo?
1 estrella2 estrellas3 estrellas4 estrellas5 estrellas (1 votos, promedio: 5,00 sobre 5)
Loading...

Suscríbete. Déjanos tu email y recibe contenido genial cada mes


Artículo escrito por

¡Exprésate! Dejanos tu comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

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...