开发者社区 问答 正文

本地模拟发送post请求,XML该怎么传?? 400 报错

本地模拟发送post请求,XML该怎么传?? 400 报错

波总,jfinal-weixin本地测试怎么搞,我参数不知道该怎么传

下面是我的post请求

InTextMsg inMsg = new InTextMsg("asd","asdddddd",  Integer.valueOf(millis), "text");
inMsg.setContent(content);
inMsg.setMsgId("1234567890123456");
//该textin   是 XML格式      toString()了
String textin = Utils.textin(inMsg);
String url = "http://127.0.0.1:8080/clmf_weixin_dev_src/msg";
JSONObject data = new JSONObject();
data.put("data", textin);
//我直接将XML放进post数据,
String post = HttpKit.post(url, textin);



Utils.textin
public static String textin(InTextMsg inMsg){
		 StringBuffer xml = new StringBuffer();
		 xml.append("<xml>");
		 xml.append("<ToUserName><![CDATA["+inMsg.getFromUserName()+"]]></ToUserName>");
		 xml.append("<FromUserName><![CDATA["+inMsg.getToUserName()+"]]></FromUserName>");
		 xml.append("<CreateTime>"+inMsg.getCreateTime()+"</CreateTime>");
		 xml.append("<MsgType><![CDATA[text]]></MsgType>");
		 xml.append("<Content><![CDATA["+inMsg.getContent()+"]]></Content>");
		 xml.append("</xml>");
		 return xml.toString();
	 }




结果在控制台    有Parameter参数的打印,
Parameter   : <xml><ToUserName><![CDATA[asdddddd]]></ToUserName><FromUserName><![CDATA[asd]]></FromUserName><CreateTime>1437033507</CreateTime><MsgType><![CDATA[text]]></MsgType><Content><![CDATA[hehehehe]]></Content></xml>=

最后面还多了一个‘=’。

我把微信介入验证什么的都注释掉了,我只想在本地做一下测试,该怎么搞?  


其实我的最终目的是,主动给指定的微信用户发送一条消息,所以我才会有模拟请求的想法。

jfinal-weixin里面有封装好的主动给指定用户发送消息的方法吗?

具体的业务逻辑:类似teambition,项目组长给我指定任务的时候,微信会主动推一条信息告诉我,或者超时的时候,也会每天推一条消息告诉我


展开
收起
爱吃鱼的程序员 2020-05-31 13:01:03 761 分享 版权
阿里云 AI 助理回答

在本地模拟发送POST请求并传递XML数据时,确保你的请求格式正确且符合接收端的预期。从你描述的问题来看,有几个关键点需要注意:

  1. Content-Type设置:在发送包含XML内容的POST请求时,需要在HTTP头中指定正确的Content-Type,通常是application/xml或者text/xml。这告诉服务器你发送的是XML数据。

  2. XML格式问题:确保生成的XML字符串是格式良好的,包括合适的根元素、属性和闭合标签。你提供的代码片段中直接拼接XML字符串,但未展示完整,需确认最终生成的XML是否格式正确无误。

  3. 参数异常:控制台打印出的“Parameter : 1437033507=”表明可能存在参数解析错误,可能是因为XML没有被正确识别或处理。多出的等号(‘=’)可能是由于解析XML时的错误导致的。

针对你的场景,这里是一个简化的修正建议:

// 构建XML字符串时确保格式正确,例如添加根节点
public static String textin(InTextMsg inMsg) {
    StringBuilder xml = new StringBuilder();
    xml.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
    xml.append("<InTextMsg>");
    xml.append("<ToUserName><![CDATA[").append(inMsg.getToUserName()).append("]]></ToUserName>");
    xml.append("<FromUserName><![CDATA[").append(inMsg.getFromUserName()).append("]]></FromUserName>");
    xml.append("<CreateTime>").append(inMsg.getCreateTime()).append("</CreateTime>");
    xml.append("<MsgType><![CDATA[text]]></MsgType>");
    xml.append("<Content><![CDATA[").append(inMsg.getContent()).append("]]></Content>");
    xml.append("<MsgId>").append(inMsg.getMsgId()).append("</MsgId>");
    xml.append("</InTextMsg>");
    return xml.toString();
}

// 发送POST请求时,设置正确的Content-Type
String url = "http://127.0.0.1:8080/clmf_weixin_dev_src/msg";
Map<String, String> headers = new HashMap<>();
headers.put("Content-Type", "application/xml; charset=utf-8");
String textin = Utils.textin(inMsg);
String postResult = HttpKit.post(url, textin, headers); // 确保你的HttpKit支持传入headers

关于主动给微信用户发送消息,jfinal-weixin框架应该有提供相应的方法来实现这一功能。通常,你需要调用该框架提供的API,准备好接收者的OpenID、消息类型及内容,然后调用发送方法。具体实现细节请参考jfinal-weixin的官方文档或示例代码,查找与发送客服消息相关的部分,比如sendCustomMessage方法。

对于类似Teambition的任务通知场景,你需要在后端逻辑中监听任务状态变化,当满足特定条件(如任务指派或超时)时,触发向指定微信用户的推送逻辑。确保你已经获取了目标用户的OpenID,并遵循微信接口的调用规则和频率限制。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答