相关文章推荐
失恋的鞭炮  ·  affinity ...·  11 月前    · 
买醉的墨镜  ·  [Solved] C#: how to ...·  1 年前    · 
千年单身的柚子  ·  Errors coming after I ...·  1 年前    · 

公司项目从springboot1.x升级到2.x后,使用httpclient4.5包模拟表单请求,调用其他服务接口,结果返回501。

使用postman或restTemplate调用返回就正常,java程序调用就不行。java代码如下:

省略其他代码……
CloseableHttpClient client = HttpClients.createDefault();
HttpPost httpPost = new HttpPost(url);
//头信息
httpPost.setHeader("Content-Type", "application/x-www-form-urlencoded");
//模拟post表单提交,使用UrlEncodedFormEntity请求体
List<NameValuePair> data = new ArrayList<NameValuePair>();
for(Map.Entry<String,Object> entry:requestParams.entrySet()){
	data.add(new BasicNameValuePair(entry.getKey(), entry.getValue()+""));
//设置UrlEncodedFormEntity请求体
httpPost.setEntity(new UrlEncodedFormEntity(data,"UTF-8"));
HttpResponse response = client.execute(httpPost);
省略其他代码……

解决办法:

把请求体改成StringEntity,用json串去请求post接口,代码如下:

省略其他代码……
CloseableHttpClient client = HttpClients.createDefault();
HttpPost httpPost = new HttpPost(url);
//头信息
httpPut.setHeader("Content-Type","application/json;charset=utf-8");
//设置StringEntity请求体
httpPost.setEntity(httpPut.setEntity(new StringEntity(ObjectMapperM.getInstanceOf().getMapper().writeValueAsString(requestParams),"UTF-8")););
HttpResponse response = client.execute(httpPost);
省略其他代码……
问题:尝试 POST 请求 时收到 501 未实现的错误。 GET方法工作得很好,但是它的数据长度限制使得我希望传递给PHP脚本的XML字符串不可行。背景:我根据一些 使用 Java Script的用户输入生成XML字符串。接下来,我尝试将此XML字符串(在编码之后)传递给PHP脚本,以将字符串写为服务器上的XML文件并执行关于它的命令。服务器:Apache / 2.4.6(CentOS)OpenSSL / 1.... [INFO] Scanning for projects... Downloading: http://repo1.maven.org/maven2/org/springframework/boot/spring-boot-starter-parent/2.2.2.RELEASE/spring-boot-starter-parent-2.2.2.RELEASE.pom [ERROR] The bu... 代码 说明 100 (继续) 请求 者应当继续提出 请求 。 服务器 返回 此代码表示已收到 请求 的第一部分,正在等待其余部分。 101 (切换协议) 请求 者已要求服务器切换协议,服务器已确认并准备切换。 2xx... Post man的test本质上是 Java Script代码,通过我们编写测试代码,每一个tests 返回 True,或是False。 每一个tests实际上就是一个测试用例。官方文档给出了很多验证方式,我们通过实例来进行学习 接口 返回 结果为json "status": 301, "message": "购买商品库存不足", "lists": [11] 1. 检查response... 最近用python的requests库写了个自动部署的脚本,但是在上传文件时卡壳了,服务器一直 返回 501 错误,想到了各种可能原因,但都没能解决。最后在抓到的包的body部分看到了对数据类型字段的描述:application/octet-stream,于是猜想是因为缺少数据类型描述导致服务器无法知道数据类型,才 返回 501 。于是从requests官网查到multipart/form-data上传文件时 http状态 返回 代码代码 说明 100 (继续) 请求 者应当继续提出 请求 。 服务器 返回 此代码表示已收到 请求 的第一部分,正在等待其余部分。 101 (切换协议) 请求 者已要求服务器切换协议,服务器已确认并准备切换。 http状态 返回 代码2xx (成功) 表示成功处理了 请求 的状态代码。