http请求经常会遇到一些奇怪的问题,例如发送请求失败,或者response出现问题,或者参数中带了url调接口失败,调用微信接口失败,调用nginx转发失败,等等。
但用postman调用不会有问题。
这说明参数本身没有问题,服务器也没有问题,是客户端的问题。在你的代码里面,客户端就是你调用的那些发http的包。例如httpclient。
通常都是body没有设置字符集。
例如
HttpPost httpPost = new HttpPost(url);
StringEntity body = new StringEntity(jsonStr, "UTF-8");
httpPost.setEntity(body);
UrlEncodedFormEntity entity = new UrlEncodedFormEntity(paramList,"UTF-8");
httpPost.setEntity(entity);
简单说就是要给特殊字符编码。body中的那些特殊字符需要编码。有时是用
URLEncoder.encode(bodyStr, "UTF-8");
例如StringEntity的源码:他将传进来的body内容转成byte数组。所以就无需URLEncoder。文章来源:https://www.toymoban.com/news/detail-730719.html
但这里charset默认是ISO8859-1,所以需要指定UTF-8。文章来源地址https://www.toymoban.com/news/detail-730719.html
public class StringEntity extends AbstractHttpEntity implements Cloneable {
protected final byte[] content;
public StringEntity(String string, ContentType contentType){
Charset charset = contentType != null ? contentType.getCharset() : null;
this.content = string.getBytes(charset);
}
}
到了这里,关于java中http请求,记得加字符集 UTF-8,StringEntity的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!