Maison  >  Article  >  développement back-end  >  Que dois-je faire si php appelle Java pour transmettre une chaîne XML tronquée ?

Que dois-je faire si php appelle Java pour transmettre une chaîne XML tronquée ?

coldplay.xixi
coldplay.xixioriginal
2020-09-30 09:15:262452parcourir

La solution à la chaîne XML tronquée transmise par php lors de l'appel de java : utilisez d'abord CURL pour terminer la requête dans la ligne de commande ; puis modifiez [Content-Type : application/json] lors de l'appel de l'interface en [application /xml] C'est tout.

Que dois-je faire si php appelle Java pour transmettre une chaîne XML tronquée ?

Solution pour que PHP appelle Java pour transmettre une chaîne XML tronquée :

Ces deux tâches en nécessitent une. interface java, contenu du paramètre :

<xml>
<ToUserName><![CDATA[wxcc878e3a91463bb5]]></ToUserName>
<FromUserName><![CDATA[on2BF1J3NBTUCFChovU-CNOs1MxU]]></FromUserName>
<CreateTime>1348831860</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[this is a test]]></Content>
<MsgId>1234567890123456</MsgId>
<BrandId><![CDATA[5]]></BrandId>
<HotelId><![CDATA[5]]></HotelId>
</xml>

en-tête de requête :

méthode :POST.

Pour des raisons objectives, il ne peut pas être appelé directement, donc postman est utilisé lors de l'auto-test de l'interface, et tout est normal lors de l'appel de l'interface. MAIS, après être allé en ligne,

org.dom4j.DocumentException : Erreur sur la ligne 1 du document : Aucun contenu n'est autorisé dans la préface. Exception imbriquée : aucun contenu n'est autorisé dans la préface.

Mais la sortie du journal :

<xml><ToUserName><![CDATA[wxcc878e3a91463bb5]]><\/ToUserName><FromUserName><![CDATA[on2BF1J3NBTUCFChovU-CNOs1MxU]]><\/FromUserName><MsgType><![CDATA[text]]><\/MsgType><Content><![CDATA[123]]><\/Content><BrandId><![CDATA[5]]><\/BrandId><HotelId><![CDATA[5]]><\/HotelId><\/xml>

Il y a des caractères d'échappement supplémentaires dans la balise, utilisez le remplacement régulier : xml.replaceAll("<\/","</");, puis la sortie est normale.

Mais le message d'exception ci-dessus est toujours là. . . . . .

Presque la même solution sur Internet : ouvrir la sauvegarde comme avec un éditeur et modifier le format d'encodage. Comment le programme a-t-il pu faire ça ! ! !

Avec l'aide de collègues, utilisez CURL pour demander :

curl -X POST \
  http://localhost:21010/wx_reply/reply2User \
  -H 'cache-control: no-cache' \
  -H 'content-type: application/xml' \
  -H 'postman-token: 08ae772c-7891-aaa2-01ef-30dccf5ffac0' \
  -d '<xml>
<ToUserName><![CDATA[wxcc878e3a91463bb5]]></ToUserName>
<FromUserName><![CDATA[on2BF1J3NBTUCFChovU-CNOs1MxU]]></FromUserName>
<CreateTime>1348831860</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[this is a test]]></Content>
<MsgId>1234567890123456</MsgId>
<BrandId><![CDATA[5]]></BrandId>
<HotelId><![CDATA[5]]></HotelId>
</xml>'

et constatez que le paramètre est en réalité :

%3Cxml%3E%0A%3CToUserName%3E%3C%21%5BCDATA%5Bwxcc878e3a91463bb5%5D%5D%3E%3C%2FToUserName%3E%0A%3CFromUserName%3E%3C%21%5BCDATA%5Bon2BF1J3NBTUCFChovU-CNOs1MxU%5D%5D%3E%3C%2FFromUserName%3E%0A%3CCreateTime%3E1348831860%3C%2FCreateTime%3E%0A%3CMsgType%3E%3C%21%5BCDATA%5Btext%5D%5D%3E%3C%2FMsgType%3E%0A%3CContent%3E%3C%21%5BCDATA%5Bthis+is+a+test%5D%5D%3E%3C%2FContent%3E%0A%3CMsgId%3E1234567890123456%3C%2FMsgId%3E%0A%3CBrandId%3E%3C%21%5BCDATA%5B5%5D%5D%3E%3C%2FBrandId%3E%0A%3CHotelId%3E%3C%21%5BCDATA%5B5%5D%5D%3E%3C%2FHotelId%3E%0A%3C%2Fxml%3E=

En d'autres termes :

spring Le contenu du corps de la requête est codé. Après avoir utilisé URLDecode.decode(xml, j'ai obtenu le contenu normal, mais j'ai constaté qu'il y avait un = supplémentaire après le paramètre (voir les paramètres ci-dessus).

L'inspection finale a révélé que c'était Content-Type:application/json lorsque le collègue PHP a appelé l'interface. Après l'avoir changé en application/xml, le problème a été résolu.

Si vous souhaitez en savoir plus sur la programmation, faites attention à la rubrique Formation php !

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn