Home >Backend Development >PHP Problem >What should I do if php calls java to pass garbled xml string?

What should I do if php calls java to pass garbled xml string?

coldplay.xixi
coldplay.xixiOriginal
2020-09-30 09:15:262500browse

Solution to php calling java to pass garbled xml string: first use CURL to complete the request in the command line; then change [Content-Type: application/json] when calling the interface to [application/xml] That’s it.

What should I do if php calls java to pass garbled xml string?

Solution to php calling java to pass garbled xml string:

These two jobs are needed, give one PHP colleagues provide java interface, parameter content:

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

request header:

method:POST.

Due to objective reasons, it cannot be called directly, so postman is used when self-testing the interface, and everything is normal when calling the interface. BUT, after going online,

org.dom4j.DocumentException: Error on line 1 of document was reported during testing: No content is allowed in the preface. Nested exception: No content is allowed in the preface.

But the log output:

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

There are more escape characters \ in the tag, use regular replacement: xml.replaceAll("<\\\\ /","</");, and then the output is normal.

But the above exception message is still there. . . . . .

Almost the same solution on the Internet: use an editor to open Save As and modify the encoding format. How could the program do this! ! !

With the assistance of colleagues, use CURL to request on the command line:

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

Found that the parameter is actually:

%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=

In other words:

spring The content of the body in the request is encoded. After using URLDecode.decode(xml, I got the normal content, but found that there was an extra = after the parameter (see the parameters above).

Final inspection found: It was Content-Type:application/json when my php colleagues called the interface. After changing it to application/xml, the problem was solved.

Want to know more For more programming learning, please pay attention to the php training column!

The above is the detailed content of What should I do if php calls java to pass garbled xml string?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn