使用java的Http请求里的Url对象调用第三方接口返回的数据中文乱码 10C

URL url = new URL("http://apis.5118.com/morerank/baidupc");
// 将url 以 open方法返回的urlConnection 连接强转为HttpURLConnection连接 (标识一个url所引用的远程对象连接)
// 此时cnnection只是为一个连接对象,待连接中
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
// 设置连接输出流为true,默认false (post 请求是以流的方式隐式的传递参数)
connection.setDoOutput(true);
// 设置连接输入流为true
connection.setDoInput(true);
// 设置请求方式为post
connection.setRequestMethod("POST");
connection.setRequestProperty("Charsert", "UTF-8"); //设置请求编码
// post请求缓存设为false
connection.setUseCaches(false);
// 设置该HttpURLConnection实例是否自动执行重定向
connection.setInstanceFollowRedirects(true);
// 设置请求头里面的各个属性 (以下为设置内容的类型,设置为经过urlEncoded编码过的from参数)
// application/x-javascript text/xml->xml数据 application/x-javascript->json对象 application/x-www-form-urlencoded->表单数据
// ;charset=utf-8 必须要,不然妙兜那边会出现乱码【★★★★★】
//addRequestProperty添加相同的key不会覆盖,如果相同,内容会以{name1,name2}
connection.addRequestProperty("from", "sfzh"); //来源哪个系统
//setRequestProperty添加相同的key会覆盖value信息
//setRequestProperty方法,如果key存在,则覆盖;不存在,直接添加。
//addRequestProperty方法,不管key存在不存在,直接添加。

connection.setRequestProperty("Authorization", " APIKEY D9FD7C014E8E4367B2891EF5B4B493");
connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");


 // 建立连接 (请求未开始,直到connection.getInputStream()方法调用时才发起,以上各个参数设置需在此方法之前进行)
 connection.connect();
 // 创建输入输出流,用于往连接里面输出携带的参数,(输出内容为?后面的内容)
 DataOutputStream dataout = new DataOutputStream(connection.getOutputStream());
 // 格式 parm = aaa=111&bbb=222&ccc=333&ddd=444
 String parm = "taskid="+taskid;
 System.out.println("传递参数:" + parm);
 // 将参数输出到连接
 dataout.writeBytes(parm);
 // 输出完成后刷新并关闭流
 dataout.flush();
 dataout.close(); // 重要且易忽略步骤 (关闭流,切记!)
 //System.out.println(connection.getResponseCode());
 // 连接发起请求,处理服务器响应  (从连接获取到输入流并包装为bufferedReader)
 BufferedReader bf = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));
 String line;
 StringBuilder sb = new StringBuilder(); // 用来存储响应数据

 // 循环读取流,若不到结尾处
 while ((line = bf.readLine()) != null) {
     //sb.append(bf.readLine());
    String lin=new String(line.getBytes(), "utf-8");
     sb.append(lin);
 }
 bf.close();    // 重要且易忽略步骤 (关闭流,切记!)
 connection.disconnect(); // 销毁连接
  return sb.toString();

            返回的数据中文乱码使用java的Http请求里的Url对象调用第三方接口返回的数据中文乱码
0

8个回答

PostMethod method = new PostMethod("url");

method.addRequestHeader("Content-Type", "application/x-www-form-urlencoded; text/html; charset=UTF-8");

httpclient.executeMethod(method);

0

设置数据的编码是utf-8, BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream(), "utf-8"));
https://blog.csdn.net/Java_WGE/article/details/79022920

0

设置下编码:

DefaultHttpClient client = new DefaultHttpClient();//获取DefaultHttpClient请求
HttpPost httpost = new HttpPost(url);//HttpPost将使用Post方式发送请求URL
JSONObject jsonObject = null;
httpost.setEntity(new StringEntity(outStr,"UTF-8"));//使用setEntity方法,将我们传进来的参数放入请求中
HttpResponse response = client.execute(httpost);//使用HttpResponse接收client执行httpost的结果
String result = EntityUtils.toString(response.getEntity(),"UTF-8");//HttpEntity转为字符串类型
jsonObject = JSONObject.fromObject(result);//字符串类型转为JSON类型
return jsonObject;
0

我的请求代码是这样的

    URL url = new URL("http://apis.5118.com/morerank/baidupc");
    // 将url 以 open方法返回的urlConnection  连接强转为HttpURLConnection连接  (标识一个url所引用的远程对象连接)
    // 此时cnnection只是为一个连接对象,待连接中
    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
    // 设置连接输出流为true,默认false (post 请求是以流的方式隐式的传递参数)
    connection.setDoOutput(true);
    // 设置连接输入流为true
    connection.setDoInput(true);
    // 设置请求方式为post
    connection.setRequestMethod("POST");
    connection.setRequestProperty("Charsert", "UTF-8"); //设置请求编码
    // post请求缓存设为false
    connection.setUseCaches(false);
    // 设置该HttpURLConnection实例是否自动执行重定向
    connection.setInstanceFollowRedirects(true);
    // 设置请求头里面的各个属性 (以下为设置内容的类型,设置为经过urlEncoded编码过的from参数)
    // application/x-javascript text/xml->xml数据 application/x-javascript->json对象 application/x-www-form-urlencoded->表单数据
    // ;charset=utf-8 必须要,不然妙兜那边会出现乱码【★★★★★】
    //addRequestProperty添加相同的key不会覆盖,如果相同,内容会以{name1,name2}
    connection.addRequestProperty("from", "sfzh");  //来源哪个系统
    //setRequestProperty添加相同的key会覆盖value信息
    //setRequestProperty方法,如果key存在,则覆盖;不存在,直接添加。
    //addRequestProperty方法,不管key存在不存在,直接添加。

    connection.setRequestProperty("Authorization", " APIKEY D9FD7C014E8E4367B2891EF5B4B493");
    connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");


     // 建立连接 (请求未开始,直到connection.getInputStream()方法调用时才发起,以上各个参数设置需在此方法之前进行)
     connection.connect();
     // 创建输入输出流,用于往连接里面输出携带的参数,(输出内容为?后面的内容)
     DataOutputStream dataout = new DataOutputStream(connection.getOutputStream());
     // 格式 parm = aaa=111&bbb=222&ccc=333&ddd=444
     String parm = "taskid="+taskid;
     System.out.println("传递参数:" + parm);
     // 将参数输出到连接
     dataout.writeBytes(parm);
     // 输出完成后刷新并关闭流
     dataout.flush();
     dataout.close(); // 重要且易忽略步骤 (关闭流,切记!)
     //System.out.println(connection.getResponseCode());
     // 连接发起请求,处理服务器响应  (从连接获取到输入流并包装为bufferedReader)
     BufferedReader bf = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));
     String line;
     StringBuilder sb = new StringBuilder(); // 用来存储响应数据

     // 循环读取流,若不到结尾处
     while ((line = bf.readLine()) != null) {
         //sb.append(bf.readLine());
        String lin=new String(line.getBytes(), "utf-8");
         sb.append(lin);
     }
     bf.close();    // 重要且易忽略步骤 (关闭流,切记!)
     connection.disconnect(); // 销毁连接
      return sb.toString();

                返回的数据中文乱码
0

他那边返回的数据确定没问题吗

0

new bufferreader的时候设置编码格式

0

建议使用spring的restTemplate,底层实现配置为apcahe httpclient,简洁方便,定位问题更轻松!

0

服务器的编码格式是什么?

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
使用HttpURLConnnection访问接口返回乱码
自己写了一个网络访问框架,使用了一段时间也没有发现什么问题,昨天使用时居然使程序崩溃了,查看日志是解析失败的问题,返回的数据是乱码。 接口是:http://120.26.201.66/mobile1/prepare.php 在浏览器上打开完全没有问题,但我调试时发现也是乱码的,怀疑是编码的问题,在我试过各种编码格式转换后发现问题依然存在,而且不是说中文出现乱码,接口返回的都是ASCII码。抓包
Java采用HttpURLConnection请求调用服务时中文乱码问题
欢迎使用Markdown编辑器写博客public class HN_cer { /** * 向指定URL发送GET方法的请求 * * @param url * 发送请求的URL * @param param * 请求参数,请求参数应该是 name1=value1&name2=value
Java后台使用get方式远程跨域请求,返回数据为中文乱码解决方法
上一篇我讲过,由于项目的需要我使用了Java后台程序向远程服务器发送get请求获得数据。虽然成功的得到了服务器返回的数据,但是不幸的是得到的中文全部为乱码。经过上网查找,找到了解决方法。这里做个说明,希望能够帮助到出现同样问题的童鞋们。 我使用的Java    GET 请求函数源代码为: public static String sendGet(String strURL,String par
Java代码:调用外部接口(使用Json格式传递参数)的方法
代码如下: String url="所给外部接口的url"; //创建连接对象 HttpClient httpClient = new HttpClient(); //创建请求 PostMethod method = new PostMethod(url); //设置请求头格式为json格式 ...
Java之~ http获取第三方数据
1.写一个http工具类demo 2.在接口或方法中调用 3.public class HttpDemo { private String sendUrl = "要访问的URL路径";//短信 private CloseableHttpClient httpClient = null; public HttpDemo(){ initHttpClient(); } private void in...
Java调用第三方http接口的解决实现
调用第三方http接口有很多种实现,我当时也是网上找了很多种方法,都比较凌乱,然后借鉴网上的方法结合自己的理解,整理出来的代码,所以写此博客记录一下。 public static String httpURLConnectionPOST (String url, JSONObject data) { StringBuffer sbf = new StringBuffer(); try { ...
weblogic请求外部接口乱码问题
    公司接了一个项目,第三方要求使用weblogic。weblogic真的太麻烦,环境复杂总会时不时出现一堆问题。由于我们做的项目需要调用会员系统的接口,但是两个是属于不用的服务器,而weblogic默认的编码格式是GBK,要改只能去改启动的配置问题,服务器这方面我们又管不了。    说正题在正式环境上weblogic配置应该改为UTF-8了,但是通过get请求参数格式为 url?a=1&am...
http访问第三方工具类,接口开发使用类
java开发工具类httpclient-4.5.jar,httpcore-4.4.6.jar,commons-logging-1.2.jar,commons-httpclient-3.1.jar,commons-logging-1.2.jar,commons-codec-1.9.jar,commons-collections-3.2.2.jar,commons-fileupload.jar,commons-validator.jar,log4j-1.2.14.jar
http协议调用第三方接口(post get方法)
public class PostUtil {     private static CloseableHttpClient httpClient;     static {         PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager();         cm.setMaxTota...
RestTemplate调用三方接口返回数据时而乱码的问题
线上的项目,有定时任务,用RestTemplate定时去调用第三方的接口,来实现同步三方的数据,代码如下: 结果运行一段时间后,发现数据有的乱码,通过跟踪日志,发现下方的情况:日志截图如下: 双方都未动过任何代码,后代日志会有时乱码,有时不乱码; 最后解决办法: ...
HTTP请求第三方接口
// 创建一个httpClient         CloseableHttpClient client = HttpClients.createDefault();         // 设置url         String url = "xxxx";         // 新建一个post请求         HttpPost post = new HttpPost(url);      ...
JAVA如何调用对方http接口得到返回数据
  https://blog.csdn.net/qq_19309473/article/details/80897111
HttpClient post请求 第三方接口验证 发送参数 请求报文头和报文体
1     HttpClient client = HttpClientUtils.getConnection();//得到client HttpUriRequest post = HttpClientUtils.getRequestMethodNew(map, chekUserLoginUrl, "post",authorization,time);//通过此接口拼接报文2  //拼接报文 +参...
Java的HttpClient类以POST方式提交数据,目标端收到后中文乱码
今天开发时,遇到利用Java中HttpClient类以POST方式提交数据,目标收到后中文乱码问题。 请求端代码: [code="java"] /** * HttpClient提交参数 * @author sunyunfang@126.com */ public static void main(String[] args) throws IOException { ...
请求第三方接口返回json格式数据的解析
HttpClient httpClient = new HttpClient(); httpClient.getHttpConnectionManager().getParams().setConnectionTimeout(5000); httpClient.getParams().setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET, "UT
java通过url调用远程接口返回json数据,有用户名和密码验证
最近有需要调用url远程接口来获取返回值,还有用户名和密码验证 使用http请求来获取接口返回值,代码如下 package com.kp.module; import com.kp.constant.ServerConstant; import java.util.Base64; import java.io.BufferedReader; import java.io.IO...
java的HttpClient请求,返回的数据部分乱码,解决办法
编码问题,哪个语言都有很多问题呀。   java的HttpClient请求,返回的数据部分乱码,解决办法: in = postMethod.getResponseBodyAsStream(); br = new BufferedReader(new InputStreamReader(in, responseEncode));  这里设置返回编码就行了。比如:“UTF-8” new...
使用rest调用远程接口,数据传输过去后,中文数据乱码问题
使用rest调用,方法为POST方法调用远程接口,请求头格式为application/x-www-form-urlencoded;charset=utf-8,数据传输过去后,对方接收到的数据中中文为乱码。解决方法是需要将中文转换为请求头对应的编码格式来进行传输。 使用URLEncoder.encode(String s, String enc) 将字符串转换为 application/x-www...
httpcilent连接第三方接口请求(post,get)
1.导入jar包: 2.前端发送ajax请求后使用Spring注解获取请求,编写后台代码,用modelandview返回到前台,这里以请求/group/create为例:
SpringBoot调用第三方接口
Spring框架提供的RestTemplate类可用于在应用中调用rest服务,它简化了与http服务的通信方式,统一了RESTful的标准,封装了http链接, 我们只需要传入url及返回值类型即可。相较于之前常用的HttpClient,RestTemplate是一种更优雅的调用RESTful服务的方式。 RestTemplate默认依赖JDK提供http连接的能力(HttpURLConnect...
RestTemplate请求结果中文乱码解决方法
如果请求的结果返回的是字符串,那么就会用上图的类来进行转换(处理) 因为 StringHttpMessageConverter 这个类默认编码不是UTF-8所以导致解析的结果中文乱码 如果想改成默认为UTF-8 这里提供一个方法.如果有哪位大神有更好的处理方式,请评论下留言。这里表示感谢 本人提供的方法是在把RestTemplate注册成spring bean进行的改造,如下图 ...
使用RestTemplate调用外部Http接口
使用RestTemplate调用外部Http接口 我们使用RestTemplate调用外部接口,restTemplate可以自动转换实体类和json字符串,这样便于我们调用接口。 通常我们得到一个外部接口,会告诉我们请求报文和响应报文。例如: 我们需要将其转化成对应的java类,如果不会转化,可以百度:json字符串在线转java类。 注意:java的类一定要与json字符串格式对应。如上,我们...
解决接口返回的URL值出现乱码
问题场景 在接入淘宝第三方登录的时候,获取AccessToken的过程中,会返回一个taobao_user_nick,返回的这个taobao_user_nick会出现乱码情况 其实,这不是乱码,是对url格式进行了加密。 urldecode:对url格式进行解码 urldecode:对url格式进行加密 <?php $str="%E5%A4%A7%E5%A4%A7%E5%A4%A7%E9...
Java | POST请求,响应中文乱码处理
老生常谈-关于POST请求中文乱码问题
接受第三方接口返回的json数据,解析转换成Javabean
我的微信端项目使用到了json 数据传输格式,在这记录一下,刚开始时是一脸的懵逼。      通过HttpClientUtils.post()工具类发送json数据,使用字符串String接受返回的json数据。 String   res=HttpClientUtils.post(待请求的URL,要提交的json数据,编码,建立链接超时时间,毫秒.等); //通过JSON.parseObje
明明编码都是utf-8但是抓包和第三方接口收到的数据都是乱码问题的原因和解决方案
这个问题是困扰了我两天, 我公司做了个智慧停车系统(php),因为需要和硬件作第三方接口接入(java),每次传车牌号的时候,对方收到我们的数据中文那段字符串都带是乱码,于是乎第一次想到的肯定是编码问题,于是去检查了我的文件编码和header头,都设置了utf-8编码,但是于事无补,还是一样的乱码,于是百度也查了很多,都没找到,但是很幸运我参考了一个博友(http://blog.csdn
java后台通过HttpClient调用第三方接口
java后台通过HttpClient调用第三方接口。 CommonFunForHttp类: public class CommonFunForHttp {    public static String getHTTP(String url){ StringBuilder builder = new StringBuilder(); HttpClient client =
java调用第三方接口代码,返回json/xml数据并可以输出到页面(含pom)
一、使用get方式调用(返回json) protected void service(HttpServletRequest request, HttpServletResponse response){ response.setCharacterEncoding("utf-8"); response.setContentType("applicat...
php curl请求接口并获取数据
当我们在做php开发的时候,很多时候需要对接口进行测试,或者更方便的调用一些已有模块的接口,取到结果并进行后续操作,我们可以通过curl进行模拟提交post和get请求,来去实现这些功能。 下面是对curl的post和get的封装 <?php /** * Created by PhpStorm. * User: thinkpad * Date: 2015/7/17 0017 * Ti
网页获取JSON中文返回乱码解决方案(java)
懒得考虑各种字符编码问题了,用了一个比较暴力的方法,不只中文,所有双字节文字都可以避免乱码问题。
新项目环境乱码问题,本地没问题第三方接口返回值中文乱码
新项目第一次起,本地中文都没有问题而第三方接口返回的中文是乱码格式 首先我是将自己的编码环境全都检查一遍idea的设置 settings 找到 发现配置都是utf-8也没问题 然后使用代码转译 结果发现尾部还是有问题 排查了2.3天最后终于想通了可能是jdk的默认编码格式然后在环境变量当中 JAVA_TOOL_OPTIONS -Dfile.enc...
HTTPClient
HTTPClient工具类public class HttpClientUtil { public static String doGet(String url, Map<String, String> param) { // 创建Httpclient对象 CloseableHttpClient httpclient = HttpClients.createDef
java调用第三方接口获取(保存)数据
后台java获取第三方接口数据: import org.springframework.web.client.RestTemplate; import org.codehaus.jackson.JsonNode; import org.codehaus.jackson.type.TypeReference; import org.codehaus.jackson.map.ObjectM...
java 接受和发送http,post,get请求,参数中文乱码解决。
一,发送post和get请求 public class HttpUtils { /** * 发送 get请求 */ public static String get(String json,String URL) { CloseableHttpClient httpclient = HttpClients.createDefault()
向指定URL发送GET或POST请求(调第三方接口)
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.URL; import java.net.URLConnection; public class HttpRequest {
httpClient调用第三方外部接口
1.添加httpClient架包 2. package com.zcl.quatrz; import java.io.IOException; import org.apache.http.HttpEntity; import org.apache.http.HttpStatus; import org.apache.http.client.config.RequestConfig;...
HttpClient接口取数据乱码问题解决方法
String url =&quot;你的接口路径&quot;;HttpClient client = new HttpClient();GetMethod get = new GetMethod(url);HttpConnectionManagerParams managerparams = client.getHttpConnectionManager().getParams();managerparams.set...
json入参的接口乱码问题解决
  需求背景:由于一些接口并没有采用常规的form形式,而是用一个json作为入参,形如{&quot;userName&quot;:&quot;zhangsan&quot;,&quot;password&quot;:&quot;123456&quot;}. 这种情况下用restTemplate也行,用httpClient也行,但是restTempalte和httpClient都可能有乱码问题。我这里用最原生的UrlConnection来解决,加上一些头部信息,即可解决乱...
Node.js 通过http调用外部接口
通过http.request发送带参数的post请求 data:发送的内容 opt:描述将要发出的请求 data:事件在数据到达时被触发 end:请求结束时触发 error:发生错误时被触发 var http = require("http"); var data = {username:"hello",password:"123456"}; data = JSON.stri
通过httpClient访问第三方API
做了一个访问知心天气的demo,知心天气官方API详情可见:http://www.thinkpage.cn/doc#now 这里只做其中的逐日天气预报和昨日天气 ,此接口属于其中的免费接口,可以获取指定地区,指定时间段内的天气信息。创建项目,引入依赖<parent> <groupId>org.springframework.boot</groupId> <artif